Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在我的查询中取消绑定到按日期分组_Sql_Database_Sql Server 2005_Datetime_Join - Fatal编程技术网

Sql 在我的查询中取消绑定到按日期分组

Sql 在我的查询中取消绑定到按日期分组,sql,database,sql-server-2005,datetime,join,Sql,Database,Sql Server 2005,Datetime,Join,我正在启动以下查询>> SELECT sauda_date, Sum(CASE WHEN buy_sell = 1 AND scrip_code = 'ADANIENT' AND sauda_date BETWEEN CONVERT(DATETIME, '1 Mar 2013') AND CONVERT(DATETIME, '1 Ap

我正在启动以下查询>>

SELECT sauda_date, 
   Sum(CASE 
         WHEN buy_sell = 1 
              AND scrip_code = 'ADANIENT' 
              AND sauda_date BETWEEN CONVERT(DATETIME, '1 Mar 2013') AND 
                                     CONVERT(DATETIME, '1 Apr 2013') THEN 
         trade_qty 
         ELSE 0 
       END)            AS BuyQty, 
   Sum(CASE 
         WHEN buy_sell = 2 
              AND scrip_code = 'ADANIENT' 
              AND sauda_date BETWEEN CONVERT(DATETIME, '1 Mar 2013') AND 
                                     CONVERT(DATETIME, '1 Apr 2013') THEN 
         trade_qty 
         ELSE 0 
       END)            AS SellQty, 
   Sum(CASE 
         WHEN buy_sell = 1 
              AND scrip_code = 'ADANIENT' THEN trade_qty 
         ELSE 0 
       END) - Sum(CASE 
                    WHEN buy_sell = 2 
                         AND scrip_code = 'ADANIENT' THEN trade_qty 
                    ELSE 0 
                  END) AS CarryForword 
FROM   tradefile 
WHERE  scrip_code = 'ADANIENT' 
GROUP  BY sauda_date 
我得到以下结果:

    sauda_date | Buy_Qty | SellQty | CarryForward

   01 Mar 2013     2000      0         2000
   01 Mar 2013        0     2000          0
   01 Mar 2013     4000      0         4000
   02 Mar 2013        0     1000       3000
   02 Mar 2013     2000       0        5000
   03 Mar 2013        0     4000       1000
但我希望它是:

    sauda_date | Buy_Qty | SellQty | CarryForward

   01 Mar 2013     6000     2000       4000
   02 Mar 2013     2000     1000       5000
   03 Mar 2013        0     4000       1000
我们可以从表格中看到:

CaryyForward=Buy_Qty-Sell_Qty;

01 Mar 2013 is date and Buy_Qty=sum(buy_Qty) for 01 Mar 2013.
02 Mar 2013 is date and Buy_Qty=sum(buy_Qty) for 02 Mar 2013.
[销售数量和结转数量相同]

我试着和不同的团体一起以防万一,但我知道以防万一是不允许的

我还尝试使用不同的where条件,但不起作用


请帮助我。

将查询放入子查询中,例如

SELECT  sauda_date , 
        MAX(Buy_Qty) Buy_Qty,
        MAX(SellQty) SellQty, 
        MAX(CarryForward) CarryForward
FROM
        (
            -- ...put your current query here ...
        ) x
GROUP   BY sauda_date

可以将GROUPBY子句与多个参数一起使用。请注意我在代码末尾添加的部分:

select sauda_date,
           SUM(CASE WHEN Buy_sell = 1 
                         and scrip_code='ADANIENT' 
                         and Sauda_Date between convert(datetime,'1 Mar 2013') 
                                        and convert(datetime,'1 Apr 2013') 
                    THEN Trade_Qty ELSE 0 END) AS BuyQty,
           SUM(CASE WHEN Buy_sell = 2 
                         and scrip_code='ADANIENT' 
                         and Sauda_Date between convert(datetime,'1 Mar 2013') 
                                        and convert(datetime,'1 Apr 2013') 
                    THEN Trade_Qty ELSE 0 END) AS SellQty ,
          SUM(CASE WHEN Buy_sell = 1 
                        and scrip_code='ADANIENT' 
                   THEN Trade_Qty ELSE 0 END) 
              - SUM(CASE WHEN Buy_sell = 2 
                              and scrip_code='ADANIENT' 
                         THEN Trade_Qty ELSE 0 END) AS CarryForword 
from tradefile 
where scrip_code='ADANIENT' 
group by sauda_date, Buy_Qty,  SellQty, CarryForward
这难道不会让你的总数崩溃吗

试试看:

GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, sauda_date))
如果没有示例数据,我无法确定,但看起来表中的每一行都有不同的时间部分。 例如,按日期时间分组将在
2013-04-04 08:24:13.790
2013-04-04 17:24:13.790
之间产生差异。上述查询将首先将两者转换为
2013-04-04 00:00:00.000

编辑:您还必须用相同的结构替换选择列表中的sauda_日期


我的数据库也有附加的时间。 因此,由于时间不同,约会的日期也不同

因此,我将查询写为:

select CONVERT(VARCHAR(11),sauda_date) AS sauda_date,SUM(CASE WHEN Buy_sell = 1 and scrip_code='ADANIENT' and Sauda_Date between convert(datetime,'1 Mar 2013') and convert(datetime,'1 Apr 2013') THEN Trade_Qty ELSE 0 END) AS BuyQty,SUM(CASE WHEN Buy_sell = 2 and scrip_code='ADANIENT' and Sauda_Date between convert(datetime,'1 Mar 2013') and convert(datetime,'1 Apr 2013') THEN Trade_Qty ELSE 0 END) AS SellQty ,     SUM(CASE WHEN Buy_sell = 1 and scrip_code='ADANIENT' THEN Trade_Qty ELSE 0 END) -SUM(CASE WHEN Buy_sell = 2 and scrip_code='ADANIENT' THEN Trade_Qty ELSE 0 END) AS CarryForword from tradefile where scrip_code='ADANIENT' group by CONVERT(VARCHAR(11),sauda_date)

这就成功了。

将整个查询粘贴到这里。您是否删除了
别名
x
?是的,有错误:Msg 156,级别15,状态1,第9行关键字“GROUP”附近的语法不正确。不允许,它不允许我在组中有多个列。不允许。仍然错误:Msg 207,级别16,状态1,第21行无效列名“购买数量”。Msg 207,16级,状态1,第21行无效列名“SellQty”。Msg 207,16级,状态1,第21行无效列名“CarryForward”。