我在SQL Server數據庫中2005年工作:SUM函數沒有正確
我的查詢是:
SELECT *
FROM TRADEFILE
WHERE CONVERT(DATETIME,SAUDA_DATE) LIKE 'MAR 1 2013%'
AND SCRIP_CODE='DLF' AND INST_TYPE LIKE 'FUT%'
這給我造成:
在這個買入= 1和賣出= 2。
如果我們做的和購買數量即buy_sell = 1,那麼它是3000
,當我們爲賣出交易數量即buy_sell總和= 2那麼3000
但是當我火了此查詢爲獲得相同的結果如下:
select
CONVERT(VARCHAR(11),sauda_date) AS sauda_date,
SUM(CASE
WHEN Buy_sell = 1 and scrip_code='DLF'
and Sauda_Date between convert(datetime,'01/03/2013')
and convert(datetime,'06/04/2013')
THEN Trade_Qty ELSE 0 END) AS BuyQty,
SUM(CASE
WHEN Buy_sell = 2 and scrip_code='DLF'
and Sauda_Date between convert(datetime,'01/03/2013')
and convert(datetime,'06/04/2013')
THEN Trade_Qty ELSE 0 END) AS SellQty ,
SUM(CASE
WHEN Buy_sell = 1 and scrip_code='DLF'
THEN Trade_Qty ELSE 0 END)
-SUM(CASE
WHEN Buy_sell = 2 and scrip_code='DLF'
THEN Trade_Qty ELSE 0 END) AS CarryForword
from tradefile
where scrip_code='DLF'
group by CONVERT(VARCHAR(11),sauda_date)
它給我結果爲:
即BuyQty = 5000且sellQty是4000 ,而我們已經分別計算了它們的3000和3000。
它怎麼會有所不同?是我sum()函數工作錯了?
我的查詢是錯誤的嗎?
作爲一個側面說明你正在使用'scrip_code =」 DLF'在每個CASE的WHERE和裏面,你可以在WHERE子句中使用它並從每個CASE中刪除它,這將簡化你的代碼。 – Taryn 2013-04-05 11:19:26