如果记录的某个其他值为true,我想要一个使用两个值/列中较大值的查询。
我正在尝试获取报告帐户。不幸的是,DB通常将Cash的值存储在名为HoldingQty
的列中,而对于其他所有类型的持有(股票,债券,共同基金),它将其存储在名为Qty
的列中。
问题在于,有时现金的价值仅存储在Qty
,有时存储在Qty
和HoldingQty
中。显然有时它只存储在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 :(得分: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 ...........