2017-03-09 61 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