我有以下查询:
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月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
答案 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}}之前排序 - 在查询中指定 - 这就是订购行的原因他们是。)