sql语句中交叉报表的使用

2025-04-18 07:24:52
推荐回答(2个)
回答1:

要想实现上述数据格式,也就是用SQL语句实现交叉表查询,我们分两种情况分别介绍一下:
一、建立静态的交叉表,前提是列数固定,这里要用到 case when 语法,语句如下:
select 电子档案号,纳税人识别号,纳税人名称,
sum(case 税种名称 when '营业税' then 实纳税额 end) as 营业税,
sum(case 税种名称 when '城建税' then 实纳税额 end) as 城市维护建设税,
sum(case 税种名称 when '教育费附加' then 实纳税额 end) as 教育费附加,
sum(case 税种名称 when '地方教育附加' then 实纳税额 end) as 地方教育附加
from dbo.税票
group by 电子档案号,纳税人识别号,纳税人名称
二、动态交叉表查询,前提是列数不固定,语句如下:
declare @sql varchar(8000)
set @sql =''
select @sql = @sql +','+税种名称+'=
sum(case 税种名称when'''+税种名称+'''then 实纳税额else 0 end)'
from dbo.税票 group by 税种名称
exec ('select 电子档案号,纳税人识别号,纳税人名称'+@sql+',sum(实纳税额) As 税额合计from dbo.税票group by 电子档案号,纳税人识别号,纳税人名称')

回答2:

DECLARE @s NVARCHAR(4000)
SELECT  @s = ISNULL(@s + ',', '') + QUOTENAME(标志)
FROM 表
---行列转换
DECLARE @SQL NVARCHAR(4000)
SELECT  @SQL='
SELECT *                                           
FROM 表(带有转换标志) PIVOT ( SUM(实际需要字段) 
for [标志] in('+@s+')
 )A'
EXEC (@SQL)