我有这张桌子
NAME|VALUE|
T | A
T | NONE
T | B
S | NONE
其中值NONE是实数中的NULL值。
<小时/> 我需要做一个查询谁将返回所有行但是如果名称有值 我应该只返回上面表中结果的值,如下所示:
NAME|VALUE|
T | A
T | B
S | NONE
你知道这样的查询吗?
提前感谢您的帮助。
答案 0 :(得分:1)
最多有两个值吗?也就是说,只能获得单个值“NONE”或其中一个值。如果是这样,你可以这样做:
SELECT name, COALESCE(MAX(NULLIF(value, 'NONE'), 'NONE')
FROM <tablename>
GROUP BY name
我相信以下内容适用于一般情况(可能有一个或多个非NONE值):
SELECT name, value FROM <tablename> WHERE value <> 'NONE'
UNION
SELECT name, value FROM <tablename> WHERE value = 'NONE'
AND name NOT IN (SELECT name FROM <tablename> WHERE value <> 'NONE')
答案 1 :(得分:1)
这是你可以做到的一种方式:
SELECT T1.NAME, T2.VALUE
FROM (SELECT DISTINCT name FROM Table1) AS T1
LEFT JOIN (SELECT * FROM Table1 WHERE VALUE IS NOT NULL) AS T2
ON T1.NAME = T2.NAME
结果:
S NULL
T A
T B