我在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_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()函数工作错误??
我的查询错了吗?
答案 0 :(得分:3)
条件差异很大,结果也是合理的。
示例:
PARTY_CODE
的条件。第二个查询中完全没有这个。INST_TYPE
SAUDA_DATE
的条件非常不同。第一个查询仅查询3月1日,而第二个查询在3月1日和4月6日之间查询所有内容。答案 1 :(得分:1)
我了解到您提供的第一个查询,其中有3000个用于buyin_qty和sell_qty。
在你的第二个查询中,CASE语句错过了来自第一个查询的某些条件
AND PARTY_CODE='0L036'
AND INST_TYPE LIKE 'FUT%'
答案 2 :(得分:1)
这应该有效:
select
CONVERT(VARCHAR(11),sauda_date) AS sauda_date,
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) AS BuyQty,
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty ,
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END)
-SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS CarryForword
from tradefile
where scrip_code='DLF'
group by CONVERT(VARCHAR(11),sauda_date)