2016-09-21 56 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