选择比较两列

时间:2015-09-30 19:51:01

标签: sql sql-server tsql select case-when

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

我正在尝试获取报告帐户。不幸的是,DB通常将Cash的值存储在名为HoldingQty的列中,而对于其他所有类型的持有(股票,债券,共同基金),它将其存储在名为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
    ...........

3 个答案:

答案 0 :(得分:5)

您的查询是正确的,但需要很少的语法排列,请尝试下面的代码

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

答案 1 :(得分: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 ...........

答案 2 :(得分: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  ...........