2013-04-08 51 views
-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 

此查詢給我下面的結果:

enter image description here

在此查詢我使用GROUP BY saudadate。也按saudadate排序。

它顯示我2013年2月28日,最後從3月1日2013,2 2013年3月..... 03月22日2013年

我想有記錄進行分組順序進一步上市。 即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

「sauda_date」的數據類型是什麼? – 2013-04-08 07:40:17

+0

@Freelancer。 。 。你應該格式化你的查詢,以便問題可讀。 – 2013-04-08 07:40:54

+0

這是nvarchar(50) – Freelancer 2013-04-08 07:41:28

回答

1

要通過sauda_datescrip_code訂購(這是你看起來是想),改變order by條款改爲:

order by Scrip_code, sauda_date, ExpiryDate 

(如果你看一下這個問題的截圖,你可以看到,結果被上ExpiryDate分類sauda_date之前 - 作爲在中指定查詢 - 這就是行按原樣排序的原因。)

+0

感謝它幫助。 – Freelancer 2013-04-08 07:58:43

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 
+0

這是訂購我sauda_date的結果,但voilating腳本代碼。即它顯示了2013年2月28日所有腳本代碼的所有數據,然後是2013年3月1日等等......但是我的預期結果是用一個腳本代碼和saudadate明智記錄以及另一個腳本代碼顯示它。 – Freelancer 2013-04-08 07:51:30

+0

然後使用'ORDER BY'子句進行操作。猜猜你需要應用哪些元素? – alzaimar 2013-04-08 07:59:00

+0

@alzaimar通過Mark Ba​​nnister獲得解決方案。 – Freelancer 2013-04-08 08:00:08