Mysql 当另一个对应列为空时,筛选出某些列
仅当AA、BB或CC不为空时,我想从行中选择A、B或C 因此,结局将会出现:Mysql 当另一个对应列为空时,筛选出某些列,mysql,sql,Mysql,Sql,仅当AA、BB或CC不为空时,我想从行中选择A、B或C 因此,结局将会出现: Name A B C AA BB cc -------------------------------------------------------- Name1 Data1 n Data3 3 n 15 Name2 n Data2 Data4 n 2 8 你的意思是喜欢使用: 或
Name A B C AA BB cc
--------------------------------------------------------
Name1 Data1 n Data3 3 n 15
Name2 n Data2 Data4 n 2 8
你的意思是喜欢使用:
或
其中
过滤整行。如果只想省略某些列,而保留其余的列,那么事情就会变得棘手。您可以通过基于IF(condition,true,false)
函数定义列来接近这一点。如果您通读他的示例,他希望???
的where子句具有某种列粒度。在示例1中,名为1的行出现在所需的结果集中,但只复制列A,因为BB失败且不为NULL,CC大于10。这似乎是使用IF()定义SELECT列的一个难题或用例。我不知道CASE
以下是我根据您的帮助提出的解决方案,以防任何人需要:选择Name
,签名时的CASE(AA
)>0然后A
结束,签名时的CASE(BB
)>0然后B
END B,签名时的CASE(CC
)>0,然后从表中选择C
结束C;
select Name, A,B,c from table where ??? AA<10 and BB<10 and CC<10
^I know this is dumb, just to help you understand my goal.
Name A B C
-------------------------
Name1 Data1
Name2 Data2 Data4
select Name, A,B,c from table where ??? AA<5 and BB<5 and CC<5
^I know this is dumb, just to help you understand my goal.
Name A B C
-------------------------
Name1 Data1
Name2 Data2
select Name, A,B,c from table where ??? AA<3 and BB<3 and CC<3
^I know this is dumb, just to help you understand my goal.
Name A B C
-------------------------
Name2 Data2
SELECT `Name`,
CASE
WHEN SIGN(`AA`)>0
THEN `A`
END A,
CASE
WHEN SIGN(`BB`)>0
THEN `B`
END B,
CASE
WHEN SIGN(`CC`)>0
THEN `C`
END C,
FROM TABLE;
select Name, A,B,c from table where
AA IS NOT NULL AND BB IS NOT NULL
AND CC IS NOT NULL
SELECT Name,
CASE WHEN AA IS NOT NULL
THEN A ELSE NULL AS acol,
CASE WHEN BB IS NOT NULL
THEN B ELSE NULL AS bcol,
CASE WHEN CC IS NOT NULL
THEN C ELSE NULL AS ccol
FROM table WHERE your_other_conditions