【发布时间】:2013-03-27 18:43:21
【问题描述】:
我在 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() 函数工作错了吗??
我的查询有误吗?
【问题讨论】:
-
附带说明,您在 WHERE 和每个 CASE 中使用
scrip_code='DLF',您可以在 WHERE 子句中使用它并从每个 CASE 中删除它,这将简化您的代码。跨度>
标签: sql database sql-server-2005 join