选择比较两个列的大小写



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

我正试图得到一个报告帐户持有。不幸的是,数据库通常将现金的值存储在称为HoldingQty的列中,而对于其他类型的持有(股票,债券,共同基金),它将其存储在称为Qty的列中。

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

基本上,我希望我的select语句说"如果证券是现金,同时查看数量和持有数量,并给我更大的值。"否则,如果不是现金,就给我一定数量的现金。

我怎么在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
    ...........

你的查询是正确的,但需要一些语法安排,试试下面的代码

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

快好了!

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

您可以使用嵌套的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  ...........

相关内容

最新更新