有点难的问题,3张表动态生成一张表,大家探讨一下

hup 2006-05-06 09:44:43
3张表如下:
医生表:
医生编号 医生姓名
01 张三
02 李四
....

收费项目表
编号 收费项
01 西药费
02 注射费
03 化验费
.....

收费明细表
日期 病人姓名 收费项编号 收费项目 医生编号 医生姓名 单价 数次 金额
20060506 病人甲 01 西药费 01 张三 50.00 1 50.00
.............

现在要根据以上的3个表生成结构如下的表(核算表):
日期  医生编号 医生姓名 西药费 注射费 化验费 .....
20060506 01 张三 50.00 0 0
........

也就是核算表的第一列是日期,第2、3列为医生(其值从医生表中取),第4列及以后的列是收费项目表的值(其值从收费明细表中取),根据收费项目的不同,核算表的结构也会不同。

怎样动态生成核算表呢?

...全文
107 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hup 2006-05-06
  • 打赏
  • 举报
回复
用到另外两个表是因为各个医院表的格式不一样,而且医院要的报表格式是固定的,如果有时医生没收入或者某项目没发生金额,报表格式就变了样,医院肯定不同意的.

谢谢楼上兄台
paoluo 2006-05-06
  • 打赏
  • 举报
回复
收费明细表中的"收费项目","医生姓名"這兩個字段可以拿掉。

以上語句也是根據表中沒有這兩個字段所寫。

如果有的話,實現你要的效果只需要用到這一個表就可以了。
paoluo 2006-05-06
  • 打赏
  • 举报
回复
--建立測試環境
Create Table 医生
(医生编号 Varchar(2),
医生姓名 Nvarchar(10))
Create Table 收费项目
(编号 Varchar(2),
收费项 Nvarchar(20))

Create Table 收费明细
(日期 Varchar(8),
病人姓名 Nvarchar(10),
收费项编号 Varchar(10),
收费项目 Nvarchar(20),
医生编号 Varchar(2),
医生姓名 Nvarchar(10),
单价 Numeric(10,2),
数次 Int,
金额 Numeric(10,2))
--插入數據
Insert 医生 Select '01', N'张三'
Union All Select '02', N'李四'

Insert 收费项目 Select '01', N'西药费'
Union All Select '02', N'注射费'
Union All Select '03', N'化验费'

Insert 收费明细 Select '20060506', N'病人甲', '01', N'西药费', '01', N'张三', 50.00, 1, 50.00
GO
--測試
Declare @S Nvarchar(4000)
Set @S=''
Select @S=@S+N',SUM(Case 收费项编号 When N'''+编号+N''' Then 单价 Else 0 End) As '''+收费项+'''' from 收费项目
Select @S=N'Select 日期,A.医生编号,B.医生姓名'+@S+N' from 收费明细 A Left Join 医生 B On A.医生编号=B.医生编号 Group By 日期,A.医生编号,B.医生姓名'
--Select @S
EXEC(@S)
--刪除測試環境
Drop Table 医生,收费项目,收费明细
--結果
/*
日期 医生编号 医生姓名 西药费 注射费 化验费
20060506 01 张三 50.00 .00 .00
*/
Yang_ 2006-05-06
  • 打赏
  • 举报
回复
没测试

其实你的收费明细表什么信息都有了,可以不用其他两个表,我假设你的收费明细表没有收费项目和医生姓名两个字段
Yang_ 2006-05-06
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql=''

select @sql=@sql+',sum(case when 收费项编号='''+rtrim(a.收费项编号)+''' then 金额 else 0 end) as ['+rtrim(b.收费项) +']'
from 收费明细表 a,收费项目表 b
where a.收费项编号=b.编号
group by a.收费项编号,b.收费项
order by a.收费项编号,b.收费项

exec('select a.日期,a.医生编号,b.医生姓名'+@sql+' from 收费明细表 a,医生表 b where a.医生编号=b.医生编号 group by a.日期,a.医生编号,b.医生姓名')


22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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