顺序日期分组问题

时间:2013-04-08 07:38:39

标签: c# sql sql-server-2005 join

我有以下查询:

SELECT sauda_date,
       ExpiryDate,
       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,'" + dtpForDate.Value.Date.ToShortDateString() + "') and 
                 convert(datetime,'" + dtpToDate.Value.Date.ToShortDateString() + "')
group by Scrip_Code,ExpiryDate,sauda_date 
order by Scrip_Code,ExpiryDate,sauda_date

此查询给出了以下结果:

enter image description here

在此查询中,我使用的是saudadate组。也可以通过saudadate订购。

它最后于2013年2月28日向我展示并于2013年3月1日进一步上市,2013年3月22日..... 2013年3月22日。

我希望记录按顺序分组。 即2013年2月28日首次至2013年3月1日,2013年3月2日,2013年3月3日......

我应该在上面的查询中做出哪些更改?

删除顺序对上述查询的结果没有影响。

同样转换(varchar(11),sauda_date)也没有任何区别。

sauda_date是nvarchar

我的预期结果:

Sauda_Date Expiry_Date  ScripCode

28 Feb 2013   .....       ADANIENT  
1 MAR  203    ......      ADANIENT  
1 Mar 2013    .......     ADANIENT
28 FEB 2013   .......     TCS
2 MAR 2013    ....        TCS

2 个答案:

答案 0 :(得分:1)

顺序是:

order by Scrip_Code,ExpiryDate,sauda_date

如果您想按sauda_date订购,则应先行:

order by sauda_date, Scrip_code, ExpiryDate

如果这是存储为字符串(错误的选择,但如果你这样做,你应该存储为" YYYY-MM-DD"格式),然后尝试:

order by convert(datetime, sauda_date), Scrip_code, ExpiryDate

答案 1 :(得分:1)

要按sauda_date scrip_code内的order by订购(这是您想要的),请将order by Scrip_code, sauda_date, ExpiryDate 子句更改为:

ExpiryDate

(如果您查看问题中的屏幕截图,您可以看到结果在sauda_date {{1}}之前排序 - 在查询中指定 - 这就是订购行的原因他们是。)