我有这个表需要帮助查询
NAME|VALUE|
T | A
T | NONE
T | B
S | NONE
其中值NONE在现实NULL值。
我需要做一个查询谁将会返回所有的行,但如果个名字有一个值 我只应这样他的值返回行结果为上表:
NAME|VALUE|
T | A
T | B
S | NONE
你知道做这样的查询吗?
在此先感谢您的帮助。
我有这个表需要帮助查询
NAME|VALUE|
T | A
T | NONE
T | B
S | NONE
其中值NONE在现实NULL值。
NAME|VALUE|
T | A
T | B
S | NONE
你知道做这样的查询吗?
在此先感谢您的帮助。
是否有最多两个值?也就是说,只能获得单个值,“无”或每个值之一。如果是这样,你可以这样做:
我相信下面将针对一般情况下(一个或多个非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')
不存在MAX值,因为字段值是文本。 – mada
@mada:这是一个非常重要的信息 - 你应该在问题中提到这一点。否则,GROUP BY和MAX将是一个很好的解决方案。 –
MAX仍然适用于文本字段。在任何一个名称只有两个可能的值的情况下(非“NONE”和“NONE”),我们可以利用MAX从聚合中删除NULL的事实,留下单个非NONE值。根据定义,这个值是MAX。如果只为特定名称找到NONE值,我们将MAX返回的NULL更改回字符串“NONE”(现在添加一个编辑以涵盖此案例)。 –
这里是你可以做的一种方式:
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
每个名称最多有两行?每个名称会有最多一行吗?如果不是,您想要返回哪个值? –
难道会有像(T,A),(T,A)这样重复的名称值对,或者是否存在唯一的约束? –