0

我在 SQL Server 2005 中的数据库:

在此处输入图像描述

我的查询是:

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() 函数工作错了吗?

我的查询是错误的吗?

4

3 回答 3

3

条件完全不同,因此结果也是合理的。

例子:

  1. 在您的第一个查询中,您有一个PARTY_CODE. 这在第二个查询中完全缺失。
  2. 这同样适用于INST_TYPE
  3. 的条件SAUDA_DATE非常不同。第一个查询仅查询 3 月 1 日,而第二个查询查询 3 月 1 日和 4 月 6 日之间的所有内容。
于 2013-04-05T11:16:20.437 回答
1

我知道你给出的第一个查询,buyin_qty 和 sell_qty 有 3000 个。

在具有 CASE 语句的第二个查询中,错过了第一个查询中的一些 where 条件

 AND PARTY_CODE='0L036'
 AND INST_TYPE LIKE 'FUT%'
于 2013-04-05T11:22:21.330 回答
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)
于 2013-04-06T03:39:13.537 回答