SQL2000 SQL语句求解,在线等。。。

w3k 2013-01-02 10:26:17


收费项目表(tb_sfxm)
项目编码 名称 金额
001 交通费 500
002 生活补贴 500
003 通讯费 500
004 住房补贴 500
005 奖金 500
006 提成费 1000

人员参与信息表(tb_info)
收费项目编码 姓名
001 张三
002 张三
003 张三
004 张三
005 张三
001 李四
002 李四
003 李四
004 李四
001 龙五
002 龙五
003 龙五

根据人员参与信息表对照收费项目表,需要动态生成如下格式:

姓名 交通费 生活补贴 通讯费 住房补贴 奖金 提成费 …… 小计
张三 500 500 500 500 500 0 2500
李四 500 500 500 500 0 0 2000
龙五 500 500 500 0 0 0 1500

...全文
349 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
w3k 2013-01-02
  • 打赏
  • 举报
回复
先结贴吧。SQLITE问题,大家有空时在帮忙哈
w3k 2013-01-02
  • 打赏
  • 举报
回复
好,问题是解决80%了,我还有用到单机版库SQLITE,如果是SQLITE能如何动态实现呢?可否赐教
百年树人 2013-01-02
  • 打赏
  • 举报
回复
引用 6 楼 w3k 的回复:
项目名称最多10个,该如何静态实现呢?
按照5楼的写法,把所有的名称写进去(一个名称对应增加多一行)即可
w3k 2013-01-02
  • 打赏
  • 举报
回复
项目名称最多10个,该如何静态实现呢?
百年树人 2013-01-02
  • 打赏
  • 举报
回复
静态SQL的写法如下:
select 
  a.姓名,
  sum(case when b.名称='交通费' then b.金额 else 0 end) as [交通费],
  sum(case when b.名称='生活补贴' then b.金额 else 0 end) as [生活补贴],
  sum(case when b.名称='通讯费' then b.金额 else 0 end) as [通讯费],
  sum(case when b.名称='住房补贴' then b.金额 else 0 end) as [住房补贴],
  sum(case when b.名称='奖金' then b.金额 else 0 end) as [奖金],
  sum(case when b.名称='提成费' then b.金额 else 0 end) as [提成费],
  sum(b.金额) as 合计 
from 
  tb_info a 
join 
  tb_sfxm b 
on 
  a.收费项目编码=b.项目编码 
group by 
  a.姓名
發糞塗牆 2013-01-02
  • 打赏
  • 举报
回复
动态sql就要一个变量,而且你的是2000,pivot又用不上
百年树人 2013-01-02
  • 打赏
  • 举报
回复
引用 2 楼 w3k 的回复:
谢谢JosY版主,若不需要 @sql 这个变量,能实现吗?
如果你的项目名称是固定的,可以使用静态SQL写,不需要变量,如果是不固定,须使用动态SQL,就需要用到这个变量
w3k 2013-01-02
  • 打赏
  • 举报
回复
谢谢JosY版主,若不需要 @sql 这个变量,能实现吗?
百年树人 2013-01-02
  • 打赏
  • 举报
回复
if object_id('[tb_sfxm]') is not null drop table [tb_sfxm]
go
create table [tb_sfxm]([项目编码] varchar(3),[名称] varchar(8),[金额] int)
insert [tb_sfxm]
select '001','交通费',500 union all
select '002','生活补贴',500 union all
select '003','通讯费',500 union all
select '004','住房补贴',500 union all
select '005','奖金',500 union all
select '006','提成费',1000
go
if object_id('[tb_info]') is not null drop table [tb_info]
go
create table [tb_info]([收费项目编码] varchar(3),[姓名] varchar(4))
insert [tb_info]
select '001','张三' union all
select '002','张三' union all
select '003','张三' union all
select '004','张三' union all
select '005','张三' union all
select '001','李四' union all
select '002','李四' union all
select '003','李四' union all
select '004','李四' union all
select '001','龙五' union all
select '002','龙五' union all
select '003','龙五'
go

declare @sql varchar(8000)
select @sql=isnull(@sql+',','')
  +'sum(case when b.名称='''+名称+''' then b.金额 else 0 end) as ['+名称+']'
from
(select distinct 名称 from tb_sfxm) t

exec ('select a.姓名,'
  +@sql
  +',sum(b.金额) as 合计 from tb_info a join tb_sfxm b on a.收费项目编码=b.项目编码 group by a.姓名'
)

/**
姓名   奖金          交通费         生活补贴        提成费         通讯费         住房补贴        合计
---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
李四   0           500         500         0           500         500         2000
龙五   0           500         500         0           500         0           1500
张三   500         500         500         0           500         500         2500

(3 行受影响)
**/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧