需要查询帮助

时间:2010-02-05 14:40:39

标签: postgresql

我有这张桌子

NAME|VALUE|
T   |  A
T   |  NONE
T   |  B
S   |  NONE

其中值NONE是实数中的NULL值。

<小时/> 我需要做一个查询谁将返回所有行但是如果名称有值 我应该只返回上面表中结果的值,如下所示:

NAME|VALUE|
T   |  A
T   |  B 
S   |  NONE

你知道这样的查询吗?

提前感谢您的帮助。

2 个答案:

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