0

SQL Server 2005 の私のデータベース:

ここに画像の説明を入力

私のクエリは次のとおりです。

SELECT * 
FROM TRADEFILE
WHERE CONVERT(DATETIME,SAUDA_DATE) LIKE 'MAR  1 2013%' 
  AND SCRIP_CODE='DLF' AND INST_TYPE LIKE 'FUT%'

これは私に結果を与えます:

ここに画像の説明を入力

この場合、Buy=1 と Sell=2 です。

Buy Qty の合計を作る場合、つまり buy_sell=1 とすると、それは 3000 です

そして、販売取引数量の合計を作成すると、つまりbuy_sell = 2の場合、それは3000です

しかし、次のように同じ結果を得るためにこのクエリを起動すると:

select 
   CONVERT(VARCHAR(11),sauda_date) AS sauda_date,
   SUM(CASE 
        WHEN Buy_sell = 1 and scrip_code='DLF' 
            and Sauda_Date between convert(datetime,'01/03/2013') 
            and convert(datetime,'06/04/2013') 
        THEN Trade_Qty ELSE 0 END) AS BuyQty,
    SUM(CASE 
        WHEN Buy_sell = 2 and scrip_code='DLF' 
            and Sauda_Date between convert(datetime,'01/03/2013') 
            and convert(datetime,'06/04/2013') 
        THEN Trade_Qty ELSE 0 END) AS SellQty ,     
    SUM(CASE 
        WHEN Buy_sell = 1 and scrip_code='DLF' 
        THEN Trade_Qty ELSE 0 END) 
      -SUM(CASE 
           WHEN Buy_sell = 2 and scrip_code='DLF' 
           THEN Trade_Qty ELSE 0 END) AS CarryForword 
from tradefile 
where scrip_code='DLF' 
group by CONVERT(VARCHAR(11),sauda_date)

次のような結果が得られます。

ここに画像の説明を入力

つまり、BuyQty=5000 で SellQty は 4000 ですが、それぞれ 3000 と 3000 と計算しています。

どのように違うのでしょうか?私の sum() 関数は間違って動作していますか??

私のクエリは間違っていますか?

4

3 に答える 3

3

条件がかなり異なるため、結果も同様であると考えられます。

例:

  1. 最初のクエリには、 の条件がありますPARTY_CODE。これは、2 番目のクエリでは完全に欠落しています。
  2. 同じことが言えますINST_TYPE
  3. の状態SAUDA_DATEが大きく異なります。最初のクエリは 3 月 1 日のみをクエリし、2 番目のクエリは 3 月 1 日から 4 月 6 日までのすべてをクエリします。
于 2013-04-05T11:16:20.437 に答える
1

あなたが与えた最初のクエリは、buyin_qty と Sell_qty に 3000 があることを理解しました。

CASE ステートメントを持つ 2 番目のクエリでは、最初のクエリの where 条件の一部が欠落しています

 AND PARTY_CODE='0L036'
 AND INST_TYPE LIKE 'FUT%'
于 2013-04-05T11:22:21.330 に答える
1

これはうまくいくはずです:

select 
   CONVERT(VARCHAR(11),sauda_date) AS sauda_date,
   SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) AS BuyQty,
   SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty ,     
   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 CarryForword 
from tradefile 
where scrip_code='DLF' 
group by CONVERT(VARCHAR(11),sauda_date)
于 2013-04-06T03:39:13.537 に答える