27,579
社区成员
发帖
与我相关
我的任务
分享
create table tb(部门 varchar(10),人员类别 varchar(10) , 项目 varchar(10) , 借方科目 varchar(10),贷方科目 varchar(10),金额 int)
insert into tb values('工厂', '管理人员','个人保险','100204', '218105', 1000)
insert into tb values('工厂', '管理人员','单位保险','310000', '400000', 2000)
insert into tb values('工厂', '管理人员','公积金','公积金','公积金',0)
go
--sql 2000静态
select 部门 ,
人员类别,
max(case 项目 when '个人保险' then 金额 end) [个人保险],
max(case 项目 when '个人保险' then 借方科目 end) [借方科目],
max(case 项目 when '个人保险' then 贷方科目 end) [贷方科目],
max(case 项目 when '单位保险' then 金额 end) [单位保险],
max(case 项目 when '单位保险' then 借方科目 end) [借方科目],
max(case 项目 when '单位保险' then 贷方科目 end) [贷方科目],
max(case 项目 when '公积金' then 金额 end) [公积金],
max(case 项目 when '公积金' then 借方科目 end) [借方科目],
max(case 项目 when '公积金' then 贷方科目 end) [贷方科目]
from tb
group by 部门 , 人员类别
/*
---------- ---------- ----------- ---------- ---------- ----------- ---------- ---------- ----------- ---------- ----------
工厂 管理人员 1000 100204 218105 2000 310000 400000 0 公积金 公积金
(所影响的行数为 1 行)
*/
--sql 2000动态
declare @sql varchar(8000)
set @sql = 'select 部门 , 人员类别 '
select @sql = @sql + ' , max(case 项目 when ''' + 项目 + ''' then 金额 end) [' + 项目 + ']'
+ ' , max(case 项目 when ''' + 项目 + ''' then 借方科目 end) [借方科目]'
+ ' , max(case 项目 when ''' + 项目 + ''' then 贷方科目 end) [贷方科目]'
from (select distinct 项目 from tb) as a
set @sql = @sql + ' from tb group by 部门 , 人员类别'
exec(@sql)
/*
部门 人员类别 单位保险 借方科目 贷方科目 个人保险 借方科目 贷方科目 公积金 借方科目 贷方科目
---------- ---------- ----------- ---------- ---------- ----------- ---------- ---------- ----------- ---------- ----------
工厂 管理人员 2000 310000 400000 1000 100204 218105 0 公积金 公积金
*/
drop table tb
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
部门 NVARCHAR(100),
人员类别 NVARCHAR(100),
项目 NVARCHAR(100),
借方科目 NVARCHAR(100),
贷方科目 NVARCHAR(100),
金额 INT
)
INSERT INTO TB
SELECT '工厂','管理人员','个人保险','100204','218105',1000 UNION ALL
SELECT '工厂','管理人员','单位保险','310000','400000',2000 UNION ALL
SELECT '工厂','管理人员','人寿保险','310000','100204',3000 UNION ALL
SELECT '工厂','普通人员','人寿保险','218105','310000',3000 UNION ALL
SELECT '工厂','普通人员','单位保险','213232','213123',4089 UNION ALL
SELECT '工厂','高级领导','失业保险','454534','676767',4546
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL=ISNULL(@SQL+',','')+'MAX(CASE WHEN 项目='''+项目+''' THEN 金额 ELSE 0 END)'+项目+',[借方科目]=(CASE WHEN (MAX(CASE WHEN 项目='''+项目+''' THEN 金额 ELSE 0 END))=0 THEN 0 ELSE '''+借方科目+''' END)'+' ,[贷方科目]=(CASE WHEN (MAX(CASE WHEN 项目='''+项目+''' THEN 金额 ELSE 0 END))=0 THEN 0 ELSE '''+贷方科目+''' END)'FROM TB GROUP BY 部门,人员类别,项目,借方科目,贷方科目
SELECT @SQL='SELECT 部门,人员类别,项目,'+@SQL+' FROM TB'+' GROUP BY 部门,人员类别,项目,借方科目,贷方科目'
EXEC (@SQL)