2017-03-09 58 views
0

我有一個表(table1),它有2列id名稱以下是表中的數據。我想改進我的SQL

----輸入表---

id name 
1 | ABC 
2 | XYZ 
3 | DEF 

我想要寫SQL,這將給輸出如下面提到輸出的

列是IDcol1col2 and col3及以下,預計在列中的值

1 TRUE FALSE FALSE

2 FALSE TRUE FALSE

3 FALSE FALSE TRUE

現在我想寫一個基於SQL在上面的輸出。

我寫了一個SQL使用CASE語句與SQL,但我知道應該有一個更好的方式來寫這個SQL並獲得輸出。

我的SQL:

select id, CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS colTRUE ,FALSE as col2,FALSE as col3 from tabel1 
union all 
select id, FALSE AS col1 ,CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END as col2,FALSE as col3 from tabel1 
union all 
select id, FALSE AS col1 ,FALSE as col2,CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END col3 from tabel1 

回答

2
SELECT t.id, t1.id = t.id, t2.id = t.id, t3.id = t.id 
FROM table t, table t1, table t2, table t3 
WHERE t1.id != t2.id 
    AND t2.id != t3.id 
    AND t1.id != t3.id 
1

case語句是造成這種情況的最佳工具。有時你只需要用你的第一個預感。但是,您不需要union all運算符,只需將每個CASE語句用作SELECT語句中的單個值即可。

+0

的建議我擺脫了聯盟,這是一個很好的suggestion.Thank你了。 – Vikram

1

我認爲這是你正在尋找,但我不知道爲什麼。

select 
    id, 
    CASE WHEN NAME ='ABC' THEN 'TRUE' ELSE 'FALSE' END AS col, 
    CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS col2, 
    CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END AS col3 
from tabel1 
+0

是的,這確實解決了,但正在尋找一個更簡單的選項,如果任何因爲我的實際工作有大約25列,我必須應用這種CASE語句。 – Vikram

+0

@Vikram - 只需編寫一條SQL語句來編寫您的SQL語句 – Hogan