2015-09-30 26 views
5

レコードの特定の他の値がtrueの場合は、2つの値/列のうち大きい方を使用するクエリが必要です。2つの列を比較する大文字小文字を選択する

私は報告書口座の保有を取得しようとしています。残念ながら、DBは通常、HoldingQtyという列にCashの値を格納し、その他の種類の保有(株式、債券、ミューチュアルファンド)の場合はQtyという列に格納します。

現金の値がQtyにのみ格納されることがあり、時にはQtyHoldingQtyの両方にあることがあるという問題があります。明らかに、時にはそれは上記のようにHoldingQtyにのみ格納されます。

基本的には、「セキュリティが現金であれば、数量と保有数量を見て、それよりも大きいものを私に与えてください」と言いたいのですが、セキュリティが現金でない場合は、 。

T-SQLではどのように記述しますか?ここに私の努力です:

SELECT 
    h.account_name, h.security_name, h.security_type, h.price, 
    (CASE: 
     WHEN security_type = 'cash' 
      THEN (WHEN h.qty > h.holdingqty 
        THEN h.qty 
        ELSE h.holdingqty) 
     ELSE qty) as quantity, 
    h.total_value 
FROM 
    holdings h 
WHERE 
    ........... 
+0

あなたは構文を除いて、ほとんどがあります。 –

+2

複合型ケースステートメント 'caseの場合は、security_Type = 'cash'、h.qty <= h.holdingqty、次にh.holdingqty 、それ以外はh.qty end quantityとなります。これは基本的に型が現金で、holdingqtyが> qtyはholdingqtyを使用し、そうでない場合はqtyを使用します。私たちはそれが現金ではないことをいつも知っているので、私はいつもqtyを使用します。私はcase文を簡略化するために少しオーダーを変更しました。 – xQbert

+2

これらの列がNULL可能であるかどうかに注意してください。 – shawnt00

答えて

4

あなたのクエリは正しいですが、いくつかの構文の配置を必要とする、ほとんどがコード

SELECT h.account_name, h.security_name, h.security_type, h.price, 
    CASE WHEN security_type = 'cash' then 
            CASE when h.qty > h.holdingqty then h.qty 
             else h.holdingqty END 
    ELSE qty END AS 'YourColumnName' 
) as quantity, h.total_value 
FROM holdings h 
where ........... 
+0

ご協力ありがとうございます! –

2

下にしてみてください!

SELECT h.account_name , 
     h.security_name , 
    h.security_type , 
    h.price , 
    CASE WHEN security_type = 'cash' 
     THEN CASE WHEN h.qty > h.holdingqty THEN h.qty 
        ELSE h.holdingqty 
       END 
     ELSE qty 
    END AS quantity , 
    h.total_value 
FROM holdings h 
WHERE ........... 
+0

ご協力ありがとうございます! –

2

あなたは、ネストされたcase式で、この動作を実現することができます。

SELECT h.account_name, h.security_name, h.security_type, h.price, 
     CASE security_type 
     WHEN 'cash' THEN CASE WHEN h.qty > h.holdingqty THEN h.qty 
                 ELSE h.holdingqty 
         END 
     ELSE h.qty 
     END 
FROM holdings h 
WHERE ........... 
+0

ご協力いただきありがとうございます! –

関連する問題