2016-09-21 55 views
0

非常簡單的任務,但我無法寫入相應的SQL。在SQL中使用GROUP時的情況

兩個因子變量var1與5個級別var2是二進制的0/1。

我想計算所有由var1和var2組成的行,但是使用新變量。

select 
    var1, var2, count(*) 
from 
    tab 
group by 
    var1, var2; 

給我

var1 var2 Count(*) 
1 1 0 32 
2 1 1 80 
3 2 1 80 
4 2 0 33 
5 3 1 82 
6 3 0 33 
7 4 1 81 
8 4 0 33 
9 5 0 33 
10 5 1 88 

期望是這樣的格式:

var1 var1=0 var1=1 
1 32  80 
2 33  80 
3 33  82 
4 33  81 
5 33  88 

不起作用:

select 
    var1, 
    case 
     when var2 = 1 then count(*) 
    end as svar1, 
    case 
     when var2 = 0 then count(*) 
    end as svar2 
from 
    tab 
group by 
    var1; 

我的查詢不起作用,因爲VAR2不是一部分的關聯組, 我如何獲得這種格式?

+0

嘗試'sel'?哪些dbms具有奇怪的語法? – jarlh

+0

teradata,只是短暫的選擇沒有注意到對不起 – Sebastian

回答

2

你需要做的coniditional aggregation..please提供一些測試數據,測試以及

select var1 
sum(case when var1=0 then 1 else 0 end) as var1, 
sum(case when var1=1 then 1 else 0 end) as var2 
group by var1 
+0

非常感謝你的快速幫助,完美的作品。 – Sebastian

-1

試試這個

select 
    var1, 
    case 
    when var2 = 1 then count(*) 
    end as svar1, 
    case 
    when var2 = 0 then count(*) 
    end as svar2 
    from tab 
    group by var1,var2; 
0

您可以使用此查詢

select var1,0 as [var1=0],1 as [var1=1] 
from(
select var1,var2,QTY from 

(
select 
var1, 
var2, 
count(*) as QTY 
from tab 
group by var1,var2; 
))up pivot (sum(QTY) for var1 in(0,1)) as pvt 

order by var1