前辈们帮帮忙,一个SQL语句问题
有如下表工资帐套管理(tb_wageaccount)
字段名 类型 字段描述 约束
Accountid Int 序号 自增 唯一
accountName Varchar 帐套名称 无
中间表(tb_wagetoaccount)
字段名 类型 字段描述 约束
toId Int 序号 自增 唯一
Accountid Int 工资套账编号 无
Wageid Int 工资编号 无
工资项目表(tb_wage)
字段名 类型 字段描述 约束
Wageid Int 序号 自增 唯一
Wageitem Varchar 工资项目 无
InitialValue Price 初始值 无
工资管理表(tb_wagemanage)
字段名称 类型 字段描述 约束
Wmangeid Int 序号 自增 唯一
Accountid Int 工资帐套编号 无
WageTime Datetime 时间 无
Status Varchar 状态 默认值 N
工资子表(tb_SubWage)
字段名 类型 字段描述 约束
SubWageId Int 序号 自增 唯一
Num Int 员工编号 无
Wmageid Int 工资管理编号 无
Wageid Int 工资项目编号 无
InitialValue Price 工资初始值 无
员工档案表(tb_ Archives )
字段名 类型 字段描述 约束
Num Int 编号 必须是数字0001 自增 主键
Name Varchar 姓名 无
Branchid Int 部门ID 无
部门表(tb_Branch)
字段名 类型 字段描述 约束
Branchid Int 序号 主键 自增 唯一
WpId Int 从属编号 默认0
Branch Varchar 部门名称 无
统计出 在时间范围内该部门的 每项工资
select b.branchid as 部门ID,count(a.num) as 人数, sw.wageid 工资项目ID,sum(sw.initialvalue) 项目工资统计
from tb_SubWage as sw,tb_wagemanage as wm , tb_Archives as a,tb_Branch as b
where wm.Wmangeid = sw.wmageid
and a.num = sw.num
and b.Branchid = a.BranchId
and wm.accountid = 1
and wm.wageTime = #2010-4-22#
and sw.wageid in
(
select w.wageid from tb_wageaccount as wc,tb_wagetoaccount as wt, tb_wage as w
where wc.accountid = wt.accountid
and w.wageid = wt.wageid
and wc.accountid = @id
)
group by sw.wageid,b.Branchid
统计结果如下
部门id 部门人数 工资项目ID 项目工资和
1 1 1 100
1 1 2 300
1 1 3 500
1 1 4 700
我需要的查询结果形式是
部门id 部门人数 工资项目ID1的工资和 工资项目ID2的工资和 工资项目ID3的工资和 工资项目ID4的工资和
1 1 100 300 500 700
问题的关键在与工资套账ID下所属的工资项目不是固定的 工资项目可能是4个 也可能是5个 这效果该怎么实现
我用的是 Access2003
初来乍到 谢谢各位了 --------------------编程问答-------------------- 一个人整天闷闷的,都不知道怎么学习了,想多交点朋友,讨论下技术
c#技术组:108806769 --------------------编程问答--------------------
--------------------编程问答--------------------
;with t as
{
select b.branchid as 部门ID,count(a.num) as 人数, sw.wageid 工资项目ID,sum(sw.initialvalue) 项目工资统计
from tb_SubWage as sw,tb_wagemanage as wm , tb_Archives as a,tb_Branch as b
where wm.Wmangeid = sw.wmageid
and a.num = sw.num
and b.Branchid = a.BranchId
and wm.accountid = 1
and wm.wageTime = #2010-4-22#
and sw.wageid in
(
select w.wageid from tb_wageaccount as wc,tb_wagetoaccount as wt, tb_wage as w
where wc.accountid = wt.accountid
and w.wageid = wt.wageid
and wc.accountid = @id
)
group by sw.wageid,b.Branchid
}
select 部门id,部门人数,case 工资项目ID when 1 then 项目工资和 else null end as 工资项目ID1的工资和,case 工资项目ID when 2 then 项目工资和 else null end as 工资项目ID2的工资和,case 工资项目ID when 3 then 项目工资和 else null end as 工资项目ID3的工资和,case 工资项目ID when 4 then 项目工资和 else null end as 工资项目ID4的工资和 from t
up --------------------编程问答-------------------- 小弟对SQL 理解不深
;with case when then else end 等字眼有些晕 直接帖上去运行不了 说是 无效的SQL语句···
但是那个 工资项目ID的个数不是固定的 也许还有ID 6号 7号 8号····
写死肯定不行的 --------------------编程问答-------------------- 不写死 那就要拼接语句啊 去SQL板块求行转列的帖子
补充:.NET技术 , C#