我有這樣選擇基於另一列的值的特定列
ID | Type | Val0 | Val1
1 | 0 | A | NULL
2 | 1 | NULL | B
我需要選擇Val0
當類型爲0,並且Val1
當類型是1,並且ValN
表時類型是N ...
我該怎麼做?
我有這樣選擇基於另一列的值的特定列
ID | Type | Val0 | Val1
1 | 0 | A | NULL
2 | 1 | NULL | B
我需要選擇Val0
當類型爲0,並且Val1
當類型是1,並且ValN
表時類型是N ...
我該怎麼做?
SELECT CASE
WHEN Type = 0 THEN Val0
WHEN Type = 1 Then Val1
.
.
WHEN Type = N Then ValN
END
FROM tbl
這顯然確實有一個問題,但如果你使用另一個數據庫的表,因爲顯然Sql Server然後施加最大數量爲10的情況...這非常小。 – eidylon 2011-11-09 16:46:40
我看這個問題的方法,你需要使用UNION:
SELECT a.val0
FROM TABLE a
WHERE a.type = 0
UNION ALL
SELECT a.val1
FROM TABLE a
WHERE a.type = 1
UNION ALL ...
UNION ALL不刪除重複項,比UNION快(因爲它消除重複)。
動態地做到這一點是可能的。
我將它解釋爲「根據給定的類型給我一個單一的值」。但你可能是完全正確的。這是很好的要求一個預期的輸出:)。 – dcp 2010-07-26 20:30:50
@dcp:我一直被我的錯誤假設咬了太多次 - 我在等待,看看它是否對其他人有意義 – 2010-07-26 20:32:51
如果N值低,則可以使用CASE statement,像CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END
做即席。如果你的N更大,你應該規範你的數據庫(即把ID => ValN映射到不同的表中)。
CASE聲明效果很好。規範化建議是好的,但並不總是可行的,當你與別人數據庫進行集成時。不幸。 – eidylon 2011-11-09 16:45:16
您能否提供預期產出的樣本? – 2010-07-26 20:27:43
'SELECT ... WHERE ID = 1 - A' – BrunoLM 2010-07-26 20:29:07
只是一個快速評論:如果你有這樣的表格,你應該考慮一個不同的模式。你的數據庫幾乎肯定不會遵循實體關係模型。 – Borealid 2010-07-26 20:30:18