我有一行数据:
id=1, p1=X, p2=Y, p1f=0, p2f=NULL
如何根据p1f或p2f为0来选择p1或p2?
我累了:
SELECT
id, p1, p2,
CASE
WHEN p1f = 0 THEN id, p1
WHEN p2f = 0 THEN id, p2
ELSE NULL
END
FROM match
提前谢谢
更新
我得到了价值。谢谢!
...但是,我仍然需要知道该值来自哪个列。
即。必须知道是否选择了列p1或p1。
这可以在一个查询中完成吗?
答案 0 :(得分:1)
您必须将id
移出case
:
SELECT
id
, CASE WHEN p1f=0 THEN p1 WHEN p2f=0 then p2 ELSE NULL END as p
, CASE WHEN p1f=0 THEN 'p1' WHEN p2f=0 then 'p2' ELSE NULL END as p_name
FROM match
这假设p1
和p2
的类型相同。如果两列具有不同的类型,则需要将一个或两个的转换添加到某个常见类型。
请注意,如果您希望根据相同的条件选择更多列,则必须在多个单独的CASE
中重复该条件。
答案 1 :(得分:0)
你非常接近:
SELECT id,
(CASE WHEN p1f = 0 THEN p1
WHEN p2f = 0 THEN p2
END)
FROM match;
case
表达式只返回一个值。