表结构如下
name code flag
测试01 测试01 0
测试01 测试01 1
测试01 测试01 1
测试01 测试01 0
测试01 测试01 0
测试02 测试02 0
测试02 测试02 1
测试02 测试02 0
测试02 测试02 0
如何查出来结果如下
name code flag=0条数 flag=1条数
测试01 测试01 3 2
测试02 测试02 3 1
name code flag
测试01 测试01 0
测试01 测试01 1
测试01 测试01 1
测试01 测试01 0
测试01 测试01 0
测试02 测试02 0
测试02 测试02 1
测试02 测试02 0
测试02 测试02 0
如何查出来结果如下
name code flag=0条数 flag=1条数
测试01 测试01 3 2
测试02 测试02 3 1
,sum(case when flag=0 then 1 else 0 end) as [flag=0条数]
,sum(case when flag=1 then 1 else 0 end) as [flag=1条数]
from tab
group by name,code
select name,code,sum(case when flag=0 then 1 else 0 end) cntf0,
sum(case when flag=1 then 1 else 0 end) cntf1
from tb
group by name,code
name,code,
sum(case when flag=0 then 1 else 0 end) as [flag=0条数],
sum(case when flag=1 then 1 else 0 end) as [flag=1条数]
from
tb
group by
name,code
DROP TABLE #temp
GO
CREATE TABLE #temp
(
[name] NVARCHAR(10),
[code] NVARCHAR(10),
flag INT
)
INSERT #temp
select N'测试01', N'测试01', N'0' union all
select N'测试01', N'测试01', N'1' union all
select N'测试01', N'测试01', N'1' union all
select N'测试01', N'测试01', N'0' union all
select N'测试01', N'测试01', N'0' union all
select N'测试02', N'测试02', N'0' union all
select N'测试02', N'测试02', N'1' union all
select N'测试02', N'测试02', N'0' union all
select N'测试02', N'测试02', N'0'
GO
--SQL:
SELECT name, code, [flag=0条数]=[0], [flag=1条数]=[1] FROM
(
SELECT name, code, flag, cnt=COUNT(flag)
FROM #temp
GROUP BY name, code, flag
) a
PIVOT
(MAX(cnt) FOR flag IN([0], [1])) b
--RESULT:
/*
name code flag=0条数 flag=1条数
测试01 测试01 3 2
测试02 测试02 3 1
*/