2013-04-23 56 views
0

我的查询是:没能获得个人日期查询结果

SELECT sauda_date,Scrip_Code, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) AS BuyQty, 
SUM(CASE WHEN Buy_sell = 1 THEN Market_Rate ELSE 0 END) AS BuyRate, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) 
AS BuyAmount, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty, 
SUM(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS SellRate, 
(CASE WHEN SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) 
>SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) 
THEN 'BF' ELSE 'BT' END) as TradeType, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) AS SellAmount, 
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 NETQTY, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END)- 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)as NetAmt, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)- 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) as PNLAmt 
FROM tradeFile where Inst_Type='FUTIDX' OR Inst_Type='FUTSTK' 
    and Sauda_Date between convert(datetime,'1 Mar 2013') 
    and convert(datetime,'4 Mar 2013') group by Scrip_Code,ExpiryDate,sauda_date 

与此查询我正在歌厅结果为:

enter image description here

正如我们可以看到2013-03-11有多个记录。 我想买他们的BuyQty,SellQty等栏目。

SELECT Scrip_Code,sauda_date, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) AS BuyQty, 
SUM(CASE WHEN Buy_sell = 1 THEN Market_Rate ELSE 0 END) AS BuyRate, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) 
AS BuyAmount, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty, 
SUM(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS SellRate, 
(CASE WHEN SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END)> 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) THEN 'BF' ELSE 'BT' END) 
as TradeType, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) AS SellAmount, 
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 NETQTY, 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END)- 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)as NetAmt, 
SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)- 
SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) as PNLAmt 
FROM tradeFile where Inst_Type='FUTIDX' OR Inst_Type='FUTSTK' 
    and Sauda_Date between convert(datetime,'1 Mar 2013') 
    and convert(datetime,'10 Mar 2013') 
    group by Scrip_Code,convert(datetime,sauda_date) 
    order by convert(varchar(11),sauda_date) 

但我得到结果为:: 即Datewise总和纪录

sauda_date scrip_code BuyQty 
2013-03-11 BANKNIFTY 150 [sum for this date] 

我已经试过

enter image description here

请帮助我。

+0

如果您在sqlfiddle中重新创建它,则帮助您更容易。 – IndoKnight 2013-04-23 11:31:33

+0

使用'DATEPART(yy-mm-dd,sauda_date)'并按此列分组。 – Meherzad 2013-04-23 11:34:11

回答

1

变化convert(datetime,sauda_date)datediff(d,0,sauda_date)和组由同一列

SELECT datediff(d,0,sauda_date) sauda_date,Scrip_Code,... 
group by Scrip_Code,ExpiryDate,datediff(d,0,sauda_date); 
+0

等待,似乎在工作 – Freelancer 2013-04-23 11:51:27

+0

我想在这添加sauda_date。我怎样才能做到这一点? – Freelancer 2013-04-24 07:06:31

1

请尝试:

SELECT DISTINCT 
    *, 
    SUM(BuyQty) OVER (PARTITION BY CONVERT(NVARCHAR(20), sauda_date, 106)sauda_date), 
    SUM(SellQty) OVER (PARTITION BY CONVERT(NVARCHAR(20), sauda_date, 106)), 
    ..... 
FROM YourTable 
1

到@richardTheKewi类似,但我用转换松动从时间要素日期时间字段

select convert(varchar(10),sauda_date,102) sauda_date,Scrip_Code, ..... 
group by Scrip_Code,ExpiryDate,convert(varchar(10),sauda_date,102)