部门 人员类别 项目 借方科目 贷方科目 金额
工厂 管理人员 个人保险 100204 218105 1000
工厂 管理人员 单位保险 310000 400000 2000
工厂 管理人员 公积金 .... .... ....
其中表1中可能还有“ 项目 ”列 是多行 。
转化成
表2 :
部门 人员类别 个人保险 借方科目 贷方科目 单位保险 借方科目 贷方科目 公积金 借方科目 贷方科目
工厂 管理人员 1000 100204 218105 2000 310000 400000 。。。。 。。。。 。。。。
--
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
部门 , 人员类别
--
sql 2000动态
declare
@sql
varchar
(
8000
)
set
@sql
=
'
select 部门 , 人员类别
'
select
@sql
=
@sql
+
'
, max(case 项目 when
'''
+
项目
+
'''
then 金额 else 0 end) [
'
+
项目
+
'
]
'
+
'
, max(case 项目 when
'''
+
项目
+
'''
then 借方科目 else 0 end) [借方科目]
'
+
'
, max(case 项目 when
'''
+
项目
+
'''
then 贷方科目 else 0 end) [贷方科目]
'
from
(
select
distinct
项目
from
tb)
as
a
set
@sql
=
@sql
+
'
from tb group by 部门 , 人员类别
'
exec
(
@sql
)