我有這些列的表:ID, Price, IsMonthlyPrice
T-SQL的計算列排序
我如何可以選擇所有和排序每週價格,考慮到:
if (IsMonthlyPrice = false) then Price is weekly
編輯:
我需要每週價格排序
每週價格月度價格將是:價格*52分之12
我有這些列的表:ID, Price, IsMonthlyPrice
T-SQL的計算列排序
我如何可以選擇所有和排序每週價格,考慮到:
if (IsMonthlyPrice = false) then Price is weekly
編輯:
我需要每週價格排序
每週價格月度價格將是:價格*52分之12
你並不需要包括兩次計算。您可以在列號上訂購
SELECT
ID,
Price,
IsMonthlyPrice,
CASE IsMonthlyPrice
WHEN 1 THEN Price * 12/52
ELSE price
END
FROM [TABLE]
order by
4
最好給這個列別名和'ORDER BY alias' – 2011-12-21 17:49:14
按號碼排序工作完美。正是我所需要的。 – 2015-11-11 21:02:51
不知道這是否是你尋找什麼,但也許嘗試:
select
id,
case isMonthlyPrice when 'false' then (price*52/12) else price end normalizedPrice
from
yourTable
order by
normalizedPrice
我一般包裹選擇在一個又一個。那麼該列不再「計算」
select Price, ID from (select ID, Price, [calculate the IsMonthly Price] as 'IsMonthlyPrice' from table) order by IsMonthlyPrice
我可能沒有把你的情況完全正確,但理論是重要的。 – 2011-12-21 14:44:02
您可以使用兩種方法對計算列進行排序。更口頭方式(未經測試的僞代碼)是:
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
不需要這樣做。 'ORDER BY別名'工作正常。 – 2011-12-21 17:51:23
我剛剛嘗試沒有別名,工作很好。奇怪的是,我是如何做到這一點的習慣。在SQL Server的過去中有沒有一點,或者是否有必要在order by子句中重複計算的場景? – 2011-12-21 18:01:18
'ORDER BY'是唯一可以重用別名的地方,並且不能在'ORDER BY'的表達式中使用別名。 – 2011-12-21 18:03:24
可以使用case
計算取決於價格是否每週或每月不同的值。
這將計算出的近似(每月假設31天)每天的價格進行排序:
select ID, Price, IsMonthlyPrice
from TheTable
order by Price/case IsMonthlyPrice when 1 then 31.0 else 7.0 end
如果您可以添加一些樣品數據和預期的輸出將會很有幫助。我想你想做一些從每週價格到每月價格的計算。如果是這樣,一個月內有多少個星期? – 2011-12-21 14:41:17
你是什麼意思「考慮」?你的意思是你只想記錄「isMonthlyPrice = false」的記錄嗎?或者你想每週一次,然後每月?另外,該字段的數據類型是什麼? (有一個BIT類型,但不接受'false'作爲值) – MatBailie 2011-12-21 14:43:21
我想選擇所有,並按周價格排序。但有些價格是按月存儲的,有些是按每週存儲的 – user441365 2011-12-21 14:46:04