sql交叉表

ALTER proc [dbo].[P401C统计来源来电数量]
(
 @统计期限种类代码 varchar(50)
 
)
as
CREATE TABLE #mpsl
(
 统计期限种类代码 int,
 统计期限种类 varchar(50),
 统计汇总种类代码 int,
 统计周期 varchar(50),
 统计分析大类 varchar(50),
 统计分析小类 varchar(50),
 统计数量 int ,
 小计 INT
)
--填充临时表数据
insert into #mpsl
SELECT     FT20统计项目开发日期_1.统计期限种类代码, FT20统计项目开发日期_1.统计期限种类,dbo.T040B统计汇总种类.统计汇总种类代码, FT20统计项目开发日期_1.统计周期,
                      CASE 统计汇总种类 WHEN '按开发人员' THEN 所属部门名称 WHEN '按所属地域' THEN 二级地域名称 WHEN '按项目应用' THEN 应用领域种类 WHEN '按项目来源' THEN
                       营销来源种类 WHEN '按重要程度' THEN 毛坯重要程度 END AS 统计分析大类,
                      CASE 统计汇总种类 WHEN '按开发人员' THEN 员工登记姓名 WHEN '按所属地域' THEN 所属地域名称 WHEN '按项目应用' THEN 应用领域大类 WHEN '按项目来源' THEN
                       营销来源分类 WHEN '按重要程度' THEN 毛坯重要程度 END AS 统计分析小类, COUNT(dbo.T200A项目登记名称.项目登记名称) AS 统计数量,SUM(COUNT(dbo.T200A项目登记名称.项目登记名称)) OVER (PARTITION BY  CASE 统计汇总种类 WHEN '按开发人员' THEN 员工登记姓名 WHEN '按所属地域' THEN 所属地域名称 WHEN '按项目应用' THEN 应用领域大类 WHEN '按项目来源' THEN
                       营销来源分类 WHEN '按重要程度' THEN 毛坯重要程度 END) AS 小计
FROM         dbo.FT20统计项目开发日期(@统计期限种类代码) AS FT20统计项目开发日期_1 INNER JOIN
                      dbo.T200A项目登记名称 ON FT20统计项目开发日期_1.项目登记名称代码 = dbo.T200A项目登记名称.项目登记名称代码 INNER JOIN
                      dbo.V161A所属地域名称 ON dbo.T200A项目登记名称.所属地域名称代码 = dbo.V161A所属地域名称.所属地域名称代码 INNER JOIN
                      dbo.T200B毛坯重要程度 ON dbo.T200A项目登记名称.毛坯重要程度代码 = dbo.T200B毛坯重要程度.毛坯重要程度代码 INNER JOIN
                      dbo.T200B项目应用领域 ON dbo.T200A项目登记名称.项目应用领域代码 = dbo.T200B项目应用领域.项目应用领域代码 INNER JOIN
                      dbo.V113A名册所有员工 ON dbo.T200A项目登记名称.登记确认用户 = dbo.V113A名册所有员工.员工登记姓名代码 INNER JOIN
                      dbo.V194A项目来源名称 ON dbo.T200A项目登记名称.营销来源种类代码 = dbo.V194A项目来源名称.营销来源种类代码 CROSS JOIN
                      dbo.T040B统计汇总种类
WHERE     (dbo.T200A项目登记名称.复核确认状态 = 1) and 统计汇总种类代码=1 AND dbo.V194A项目来源名称.营销来源种类='来电信息'
GROUP BY FT20统计项目开发日期_1.统计期限种类代码, dbo.T040B统计汇总种类.统计汇总种类代码, FT20统计项目开发日期_1.统计周期, FT20统计项目开发日期_1.统计期限种类,
                      CASE 统计汇总种类 WHEN '按开发人员' THEN 所属部门名称 WHEN '按所属地域' THEN 二级地域名称 WHEN '按项目应用' THEN 应用领域种类 WHEN '按项目来源' THEN
                       营销来源种类 WHEN '按重要程度' THEN 毛坯重要程度 END,
                      CASE 统计汇总种类 WHEN '按开发人员' THEN 员工登记姓名 WHEN '按所属地域' THEN 所属地域名称 WHEN '按项目应用' THEN 应用领域大类 WHEN '按项目来源' THEN
                       营销来源分类 WHEN '按重要程度' THEN 毛坯重要程度 END
HAVING      (CASE 统计汇总种类 WHEN '按开发人员' THEN 员工登记姓名 WHEN '按所属地域' THEN 所属地域名称 WHEN '按项目应用' THEN 应用领域大类 WHEN '按项目来源' THEN
                       营销来源分类 WHEN '按重要程度' THEN 毛坯重要程度 END IS NOT NULL) AND
                      (CASE 统计汇总种类 WHEN '按开发人员' THEN 所属部门名称 WHEN '按所属地域' THEN 二级地域名称 WHEN '按项目应用' THEN 应用领域种类 WHEN '按项目来源' THEN
                       营销来源种类 WHEN '按重要程度' THEN 毛坯重要程度 END IS NOT NULL)
insert into #mpsl SELECT DISTINCT
                      dbo.T040B统计期限种类.统计期限种类代码, dbo.T040B统计期限种类.统计期限种类,dbo.T040B统计汇总种类.统计汇总种类代码,
                      '前' + dbo.T040B统计期限期数.统计期限期数 + '期' AS 统计周期, '测试大类' AS 统计分析大类, '测试小类' AS 统计分析小类, 0 AS 统计数量,0 as 小计
FROM         dbo.T040B统计期限期数 CROSS JOIN
                      dbo.T040B统计期限种类 CROSS JOIN
                      dbo.T040B统计汇总种类
WHERE     (dbo.T040B统计汇总种类.统计汇总种类代码 =1)
-- 填充完成


-- 交叉表执行
declare @sql varchar(8000)
set @sql = 'select 统计期限种类, 统计分析大类,统计分析小类,'
select @sql = @sql + 'sum(case 统计周期 when '''+统计周期+''' then 统计数量 else 0 end) as '''+统计周期+''','from (select distinct 统计周期 from #mpsl) as a
select @sql = left(@sql,len(@sql)-1) + ' ,小计 from #mpsl where 统计期限种类代码 like '''+@统计期限种类代码+''' group by 统计分析大类,统计分析小类,统计期限种类代码,统计期限种类,小计'
exec(@sql) 
-- 交叉表执行完成

--删除临时表 
drop table #mpsl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值