Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据条件(CASE?)选择不同的列,并获取值来自的列名_Sql_Sqlite - Fatal编程技术网

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。不管怎样,我解决了这个问题,你帮了我很大的忙。谢谢