请教一个多表查询的问题

zengxie 2012-08-30 03:05:19
假如系统有三个模块,第一个是合同表(Pact),第二个是项目(Project),第三个是回款(PayBack),另外有一个费用表,费用要记录到底是属于哪个合同或是项目或是回款的费用。我做了一个系统表的记录,统计系统里面有哪些表,表结构如下:

Sys_ModuleID,ModuleName,TabelName, PrimaryKeyId,PrimaryName
1 合同 Pact PactID PactName
2 项目 Project ProjectID ProjectName
3 回款 PayBack PayBackID PayBackName


现在费用表里有两个字段(Sys_ModuleID,PrimaryKeyId)记录了到底是哪个表的哪一条数据,比如这里如果有一条记录如下:

费用ID, 费用名称,Sys_ModuleID,PrimaryKeyId
1 招待费 1 21

这个就代表这个招待费是合同的第21条数据,这里假设第21条合同的数据是“合同A”,这个名称是Pact表里的PactName这个字段,那么就是代表这个招待费是合同A的招待费。



现在我想建一个费用的视图,直接能够把“合同A”加到视图里,如下:

费用ID, 费用名称,Sys_ModuleID,PrimaryKeyId,Name
1 招待费 1 21 合同A


请教一下怎么能实现,谢谢

...全文
134 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

-->try
select a.费用ID,
a.费用名称,
a.PrimaryKeyId,
b.TableName,
b.PrimaryName
from 费用表 a,系统表 b
where a.Sys_ModuleID=b.Sys_ModuleID

declare @tab table(ID int,name varchar(30))
declare @sql varchar(max)
select @sql=(select qs+' union all ' from
(
select 'select '+b.PrimaryName+','+ltrim(a.费用ID)+' ID
from '+b.TableName+'
where '+ltrim(b.PrimaryKeyId)+'='''+ltrim(a.PrimaryKeyId)+'''' qs
from 费用表 a,系统表 b
where a.Sys_ModuleID=b.Sys_ModuleID
)t)
insert into @tab
exec(@sql)
select a.费用ID,a.费用名称,a.Sys_ModuleID,a.PrimaryKeyId,b.name
from 费用表 a,@tab b
where a.费用ID=b.ID

视图里不支持exec,你可以将上面代码写成一个存储,然后在视图里用openrowset来调用就可以了
以学习为目的 2012-08-30
  • 打赏
  • 举报
回复
你这个视图要完成什么功能,没看明白

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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