Sql 根据条件(CASE?)选择不同的列,并获取值来自的列名
我有一行数据:Sql 根据条件(CASE?)选择不同的列,并获取值来自的列名,sql,sqlite,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 先谢谢你 更新 我得到了价值。谢谢大家! …但是,我仍然需要知道该值来自哪个列 i、 e.
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
先谢谢你
更新
我得到了价值。谢谢大家!
…但是,我仍然需要知道该值来自哪个列
i、 e.必须知道是否选择了列p1或p1
这可以在一次查询中完成吗?您非常接近:
SELECT id,
(CASE WHEN p1f = 0 THEN p1
WHEN p2f = 0 THEN p2
END)
FROM match;
case
表达式只返回一个值。您必须将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
的类型相同。如果两列具有不同的类型,则需要将一个或两个类型的强制转换添加到某个公共类型
请注意,如果您希望基于相同条件选择更多列,则必须在多个单独的
案例中重复该条件。如果p1f或p2f均为0或均不为0会怎么样?没有此类案例:)谢谢。这是可行的,但我必须补充一点:p1f=0或p2f=0的位置是否有办法获取该值来自的列名?非常好。非常感谢你!非常感谢。添加WHERE子句后,您的工作也将正常进行。否则,它会选择所有记录,而不仅仅是条件为meth的记录。根据您所问的内容,这个答案非常正确,您在问题中从未提到任何where条件。我想说答案不包括其他方面too@igigi . . . 什么在哪里
条件?@GordonLinoff谢谢你!我问:“如何根据哪个p1f或p2f为0来选择p1或p2?”因此,如果没有WHERE子句,它会给出所有条目,而不仅仅是WHERE p1f或p2f为0。不管怎样,我解决了这个问题,你帮了我很大的忙。谢谢