T-SQL сортировка по вычисляемому столбцу - PullRequest
5 голосов
/ 21 декабря 2011

У меня есть таблица с этими столбцами: ID, Price, IsMonthlyPrice

Как выбрать все и отсортировать по недельной цене, учитывая, что:

if (IsMonthlyPrice = false) then Price is weekly

РЕДАКТИРОВАТЬ:

Мне нужно отсортировать по недельной цене

Недельная цена месячной цены будет: Цена * 12/52

Ответы [ 5 ]

17 голосов
/ 21 декабря 2011

Вам не нужно включать расчет дважды. Вы можете заказать на номер колонки

SELECT 
    ID, 
    Price, 
    IsMonthlyPrice, 
    CASE IsMonthlyPrice
    WHEN 1 THEN Price * 12 / 52
    ELSE price
    END
FROM [TABLE]
    order by 
        4
4 голосов
/ 21 декабря 2011

Не уверен, что это то, что вы ищете, но, возможно, попробуйте:

select 
    id,
    case isMonthlyPrice when 'false' then (price*52/12) else price end normalizedPrice
from
    yourTable
order by
    normalizedPrice
3 голосов
/ 21 декабря 2011

Вы можете сортировать вычисляемые столбцы, используя два подхода.Более вербальный подход (непроверенный псевдокод):

select ID, CASE WHEN IsMonthlyPrice = 0 THEN Price * 52 / 12 ELSE Price END AS Price
ORDER BY CASE WHEN IsMonthlyPrice = 0 THEN Price * 52 / 12 ELSE Price END

Более краткий подход:

select * from
(
select ID, CASE WHEN IsMonthlyPrice = 0 THEN Price * 52 / 12 ELSE Price END AS Price
) as derived
ORDER BY derived.Price 
0 голосов
/ 21 декабря 2011

Вы можете использовать case для расчета различных значений в зависимости от того, является цена недельной или ежемесячной.

При этом будет рассчитана приблизительная (при условии 31 дней в месяц) цена за день для сортировки:

select ID, Price, IsMonthlyPrice
from TheTable
order by Price / case IsMonthlyPrice when 1 then 31.0 else 7.0 end
0 голосов
/ 21 декабря 2011

Я обычно заворачиваю выбор в другой. тогда столбец больше не "рассчитывается"

select Price, ID from (select ID, Price, [calculate the IsMonthly Price] as 'IsMonthlyPrice' from table) order by IsMonthlyPrice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...