我有這個表需要幫助查詢
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)這樣重複的名稱值對,或者是否存在唯一的約束? –