SQL Server 2005 の私のデータベース:
私のクエリは次のとおりです。
SELECT *
FROM TRADEFILE
WHERE CONVERT(DATETIME,SAUDA_DATE) LIKE 'MAR 1 2013%'
AND SCRIP_CODE='DLF' AND INST_TYPE LIKE 'FUT%'
これは私に結果を与えます:
この場合、Buy=1 と Sell=2 です。
Buy Qty の合計を作る場合、つまり 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() 関数は間違って動作していますか??
私のクエリは間違っていますか?