2013-03-11 87 views
1
SELECT column_a1,column_b1,column_c1,column_d1,column_e1,column_f1,column_g1 
FROM mytable WHERE id=12 AND detectcolumn=1 

UNION ALL 

SELECT column_a2,column_b2,column_c2,column_d2,column_e2,column_f2 
FROM mytable WHERE id=12 AND detectcolumn=2 

UNION ALL 

SELECT column_a3,column_b3,column_c3,column_d3,column_e3,column_f3,column_g3 
FROM mytable WHERE id=12 AND detectcolumn=3 

UNION ALL 

SELECT column_a4 from mytable WHERE id=12 AND detectcolumn=4 

UNION ALL 

SELECT column_a5 from mytable WHERE id=12 AND detectcolumn=5 

UNION ALL 

SELECT column_a6 from mytable WHERE id=12 AND detectcolumn=6 

UNION ALL 

SELECT column_a7 from mytable WHERE id=12 AND detectcolumn=7  

我应该如何将所有这些sql语句合并成一个单独的sql语句。我想根据detectcolumn的值从mytable中获取特定的列。加入多个sql语句

我试着使用UNION ALL,但它给错误ORA-01789:查询块有结果列的数目不正确

+0

每个联盟选择句子必须有相同的字段计数。你的工会不符合这个要求。试着解释你将会得到什么。 – AnatolyS 2013-03-11 10:15:45

+0

我想从** mytable **获取特定列,具体取决于** detectcolumn的值** – Akki 2013-03-11 10:17:18

+0

将此问题放在问题中,而不是作为注释 – 2013-03-11 10:17:37

回答

2

使用模式,如:

select 
    case detectcolumn 
    when 4 then column_a4 
    when 5 then column_a5 
    when 6 then column_a6 
    end 
from 
    my_table 
where 
    id   = 12 and 
    detectcolumn in (4,5,6) 
+0

如何在**之后提供多个栏名然后** – Akki 2013-03-11 10:36:38

+0

您需要哪些栏?请更新该问题以获取更具体的信息 – 2013-03-11 11:37:49

+0

当** detectcolumn = 1时,我应该如何写入多个列** – Akki 2013-03-11 11:42:19