-3

我有以下查询:

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

这个查询给了我以下结果:

在此处输入图像描述

在此查询中,我使用的是 saudadate 组。也按 saudadate 订购。

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

我想让记录按顺序分组。即首先是 2013 年 2 月 28 日,然后是 2013 年 3 月 1 日、2013 年 3 月 2 日、2013 年 3 月 3 日……

我应该在上述查询中进行哪些更改?

删除 order by 对上述查询的结果没有影响。

以及转换(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
4

2 回答 2

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
于 2013-04-08T07:43:35.323 回答
1

sauda_date在内部排序scrip_code(这似乎是您想要的),请将order by子句更改为:

order by Scrip_code, sauda_date, ExpiryDate

(如果您查看问题中的屏幕截图,您可以看到结果已在ExpiryDate之前进行排序sauda_date- 正如查询中指定的那样 - 这就是行按原样排序的原因。)

于 2013-04-08T07:56:46.073 回答