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”。