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