如果记录中某个值为真,我想要一个查询使用两个值/列中的较大值。
我正在努力获取报告账户持有情况。不幸的是,数据库通常将现金价值存储在名为HoldingQty
的列中,而对于其他类型的持有(股票、债券、共同基金),它将其存储在名为Qty
的列中。
问题是有时仅在Qty
中存储现金的价值,有时同时存在于Qty
和HoldingQty
中。显然,有时仅如上所述存储在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
...........
case when security_Type = 'cash' and h.qty<=h.holdingqty then h.holdingqty else h.qty end as quantity
,这基本上是说当类型为现金且持有数量大于或等于数量时使用持有数量,否则使用数量。由于我们知道当不是现金时我们总是使用数量,我稍微改变了顺序以简化CASE语句。 - xQbert