读书人

这个结果怎么用分组SQL实现啊

发布时间: 2012-02-27 10:00:22 作者: rapoo

这个结果如何用分组SQL实现啊?
ID RY Que State
1 小王 asdf 已解决
2 小张 q23w 已解决
4 小王 asdf 未解决
5 小沈 3sw 已解决
6 小王 2333 未解决
7 小张 vdsea 未解决
.....

我想要以下分组结果:
RY Sum_01 Sum_02 Sum_03
小王 3 2 1
小张 2 1 1
小沈 1 1 0

Sum_01 代表问题总数
Sum_02 代表(已解决)问题数
Sum_03 代表(未解决)问题数

这个分组SQL能实现吗?




[解决办法]
select RY,
count(*) as 'Sum_01 ',
sum(case when State = '已解决 ' then 1 else 0 end) as 'Sum_02 ',
sum(case when State = '未解决 ' then 1 else 0 end) as 'Sum_03 ',
from 表
group by RY
[解决办法]
select ry,
sum(1) as [sum_01],
sum(case when state = '已解决 ' then 1 else 0 end) as [sum_02],
sum(case when state = '未解决 ' then 1 else 0 end) as [sum_03]
from 表
group by ry

[解决办法]
declare @t table(
ID int,
RY varchar(10),
Que varchar(10),
State varchar(10))

insert @t select 1, '小王 ', 'asdf ', '已解决 '
union all select 2, '小张 ', 'q23w ', '已解决 '
union all select 4, '小王 ', 'asdf ', '未解决 '
union all select 5, '小沈 ', '3sw ', '已解决 '
union all select 6, '小王 ', '2333 ', '未解决 '
union all select 7, '小张 ', 'vdsea ', '未解决 '

select * from @t

select RY, count(RY) as Sum_01,
sum(case State when '已解决 ' then 1 else 0 end) as Sum_02,
sum(case State when '未解决 ' then 1 else 0 end) as Sum_03
from @t a
group by RY

/*
RY Sum_01 Sum_02 Sum_03
---------- ----------- ----------- -----------
小沈 1 1 0
小王 3 1 2
小张 2 1 1

(所影响的行数为 3 行)
*/


------------

主自己的果貌似不太,呵呵
[解决办法]
直接用 create view 建立就行了



如果一定要用视图设计器, 则切换到 sql 视图, 输入视图语句


[解决办法]
...

什不支持Case

Create View v_t
as
select RY, count(RY) as Sum_01,
sum(case State when '已解决 ' then 1 else 0 end) as Sum_02,
sum(case State when '未解决 ' then 1 else 0 end) as Sum_03
from 表名
group by RY

肯定
[解决办法]
declare @t table(
ID int,
RY varchar(10),
Que varchar(10),
State varchar(10),
Date varchar(10))

insert @t select 1, '小王 ', 'asdf ', '已解决 ', '2007-7-1 '
union all select 2, '小张 ', 'q23w ', '已解决 ', '2007-7-2 '
union all select 4, '小王 ', 'asdf ', '未解决 ', '2007-7-6 '
union all select 5, '小沈 ', '3sw ', '已解决 ', '2007-6-9 '
union all select 6, '小王 ', '2333 ', '未解决 ', '2007-7-3 '
union all select 7, '小张 ', 'vdsea ', '未解决 ', '2007-7-8 '

select a.RY, isnull(b.Sum_01, 0) as Sum_01,
isnull(b.Sum_02, 0) as Sum_02,
isnull(b.Sum_03, 0) as Sum_03 from
(select distinct RY from @t) a
left join
(select RY, count(RY) as Sum_01,
sum(case State when '已解决 ' then 1 else 0 end) as Sum_02,
sum(case State when '未解决 ' then 1 else 0 end) as Sum_03
from @t a
where Date > = '2007-7-1 '
group by RY) b
on a.RY = b.RY


/*
RY Sum_01 Sum_02 Sum_03
---------- ----------- ----------- -----------
小沈 0 0 0
小王 3 1 2
小张 2 1 1

(所影响的行数为 3 行)
*/

读书人网 >SQL Server

热点推荐