比较两列并选择的情况

10

如果记录中某个值为真,我想要一个查询使用两个值/列中的较大值。

我正在努力获取报告账户持有情况。不幸的是,数据库通常将现金价值存储在名为HoldingQty的列中,而对于其他类型的持有(股票、债券、共同基金),它将其存储在名为Qty的列中。

问题是有时仅在Qty中存储现金的价值,有时同时存在于QtyHoldingQty中。显然,有时仅如上所述存储在HoldingQty中。

基本上,我希望我的选择语句说“如果证券是现金,请查看qty和holding qty,并给我较大的价值。否则,如果证券不是现金,请只给我qty。”

如何在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
    ...........

你已经接近成功了,只是语法有些问题。 - Vamsi Prabhala
2
使用复合CASE语句 case when security_Type = 'cash' and h.qty<=h.holdingqty then h.holdingqty else h.qty end as quantity,这基本上是说当类型为现金且持有数量大于或等于数量时使用持有数量,否则使用数量。由于我们知道当不是现金时我们总是使用数量,我稍微改变了顺序以简化CASE语句。 - xQbert
2
注意这些列是否可为空。 - shawnt00
3个回答

7
您的查询是正确的,但需要进行一些语法调整,请尝试下面的代码。
   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 ...........

感谢您的帮助! - Mike O.

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 ...........

感谢您的帮助! - Mike O.

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  ...........

感谢您的帮助! - Mike O.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接