-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

このクエリにより、次の結果が得られます。

ここに画像の説明を入力

このクエリでは、sudadate によるグループを使用しています。また、サウダデートで注文。

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

sauda_date範囲内で注文するにはscrip_code(これが必要なようです)、order by句を次のように変更します。

order by Scrip_code, sauda_date, ExpiryDate

(質問のスクリーンショットを見ると、クエリで指定されているように、結果がExpiryDate以前に並べ替えられていることがわかります。これが、行がそのまま並べられている理由です。)sauda_date

于 2013-04-08T07:56:46.073 に答える
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 に答える