sql查询横向显示并求和

独木成林_ 2019-01-24 04:33:30
create table TReport(公司 varchar(20) , 类型varchar(10) )
insert into tb values('上海' , '投诉' )
insert into tb values('上海' , '投诉')
insert into tb values('上海' , '意见')
insert into tb values('南京' , '举报' )
insert into tb values('南京' , '举报' )
insert into tb values('南京' , '投诉')
go

-----------------以下是我写的SQL---------------
declare @sql1 varchar(8000)set @sql1 ='select 公司 '
select @sql1 = @sql1+', count(case 类型 when '''+ 类型+''' then 类型 else '''' end) ['+ 类型+']'
from (select distinct 类型 from TReport ) as a
set @sql1=@sql1+', count(类型) 总数 from TReport group by 公司 order by r_Company_Dname' exec(@sql1)
---------------------------------------------------------
想要实现的内容
公司 投诉 意见 举报
南京 1 0 2
上海 2 1 0
总计 3 1 2

辛苦各位帮忙看看能否动态实现。
...全文
260 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2019-01-25
  • 打赏
  • 举报
回复
引用 4 楼 小久99 的回复:
[quote=引用 2 楼 RINK_1 的回复:] 试试下面的

declare @sql1 varchar(8000)
set @sql1 ='select 公司 '
select @sql1 = @sql1+', SUM(case 类型 when '''+ 类型+''' then 1 else 0 end) ['+ 类型+']'
from (select distinct 类型 from TReport ) as a 
set @sql1=@sql1+' from TReport group by 公司 order by 公司' 
exec(@sql1) 
您好,这个提示“必须声明标量变量 "@sql1"。”[/quote] 以下再试试


IF OBJECT_ID(N'TEMPDB.DBO.#TReport') IS NOT NULL
DROP TABLE #TReport
GO

create table #TReport(公司 varchar(20) , 类型 varchar(10) )
insert into #TReport values('上海' , '投诉' )
insert into #TReport values('上海' , '投诉')
insert into #TReport values('上海' , '意见')
insert into #TReport values('南京' , '举报' )
insert into #TReport values('南京' , '举报' )
insert into #TReport values('南京' , '投诉')
go

declare @sql1 varchar(8000)set @sql1 ='select 公司 '
select @sql1 = @sql1+', SUM(case 类型 when '''+ 类型+''' then 1 else 0 end) ['+ 类型+']'
from (select distinct 类型 from #TReport ) as a 
set @sql1=@sql1+' from #TReport group by 公司 order by 公司' 
exec(@sql1) 
独木成林_ 2019-01-24
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
中文全部使用英文代替了。

select
distinct gs
, (select count(*) from TReport where lx='ts' and TReport.gs = t.gs) as ts
, (select count(*) from TReport where lx='yj' and TReport.gs = t.gs) as yj
, (select count(*) from TReport where lx='jb' and TReport.gs = t.gs) as jb
from TReport t
UNION

select
'zj'
, (select count(*) from TReport where lx='ts') as ts
, (select count(*) from TReport where lx='yj') as yj
, (select count(*) from TReport where lx='jb') as jb




您好,类型跟公司都是动态的,一共有几十家公司和几十个类型。
独木成林_ 2019-01-24
  • 打赏
  • 举报
回复
引用 3 楼 刘才鬼 的回复:
如果类型是确定的
我可能会这么写

select 公司,SUM(case when 类型='投诉' then 1 else 0 end) from 表
group by 公司
union
select '合计',count(case when 类型='投诉' then 1 else 0 end) from test_students




您好,类型跟公司都是动态的,一共有几十家公司和几十个类型。
独木成林_ 2019-01-24
  • 打赏
  • 举报
回复
引用 2 楼 RINK_1 的回复:
试试下面的


declare @sql1 varchar(8000)
set @sql1 ='select 公司 '
select @sql1 = @sql1+', SUM(case 类型 when '''+ 类型+''' then 1 else 0 end) ['+ 类型+']'
from (select distinct 类型 from TReport ) as a
set @sql1=@sql1+' from TReport group by 公司 order by 公司'
exec(@sql1)



您好,这个提示“必须声明标量变量 "@sql1"。”
极客诗人 2019-01-24
  • 打赏
  • 举报
回复
如果类型是确定的
我可能会这么写

select 公司,SUM(case when 类型='投诉' then 1 else 0 end) from 表
group by 公司
union
select '合计',count(case when 类型='投诉' then 1 else 0 end) from test_students
RINK_1 2019-01-24
  • 打赏
  • 举报
回复
试试下面的

declare @sql1 varchar(8000)
set @sql1 ='select 公司 '
select @sql1 = @sql1+', SUM(case 类型 when '''+ 类型+''' then 1 else 0 end) ['+ 类型+']'
from (select distinct 类型 from TReport ) as a 
set @sql1=@sql1+' from TReport group by 公司 order by 公司' 
exec(@sql1) 
shoppo0505 2019-01-24
  • 打赏
  • 举报
回复
中文全部使用英文代替了。

select
distinct gs
, (select count(*) from TReport where lx='ts' and TReport.gs = t.gs) as ts
, (select count(*) from TReport where lx='yj' and TReport.gs = t.gs) as yj
, (select count(*) from TReport where lx='jb' and TReport.gs = t.gs) as jb
from TReport t
UNION

select
'zj'
, (select count(*) from TReport where lx='ts') as ts
, (select count(*) from TReport where lx='yj') as yj
, (select count(*) from TReport where lx='jb') as jb

22,295

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧