根据条件(CASE?)选择不同的列,并获取值来自的列名称

时间:2018-02-27 17:30:03

标签: sql sqlite

我有一行数据:

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。

这可以在一个查询中完成吗?

2 个答案:

答案 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

这假设p1p2的类型相同。如果两列具有不同的类型,则需要将一个或两个的转换添加到某个常见类型。

请注意,如果您希望根据相同的条件选择更多列,则必须在多个单独的CASE中重复该条件。

答案 1 :(得分:0)

你非常接近:

SELECT id,
       (CASE WHEN p1f = 0 THEN p1
             WHEN p2f = 0 THEN p2
        END)
FROM match;

case 表达式只返回一个值。