求一存储过程,急.请高手帮忙.

zhongxingqiche 2009-04-06 11:42:33
有两个表:
表gz:
ygbh nian yue bmmc nk1 nk2 nk3 nk4 nk5
A01 2009 03 B部门 700 500 300 100 0
A02 2008 01 C部门 800 400 600 200 0

其中的xm表是这个样子的.

表xm:
id xmmc xmlx gs
nk1 岗位工资 输入项目 null
nk2 金额 输入项目 null
nk3 工龄 输入项目 null
nk4 养老 输入项目 null
nk5 应发工资 计算项目 nk1+nk2+nk3+nk4
只有计算项目才有公式的

要求显示的结果:

ygbh nian yue bumc 岗位工资 金额 工龄 养老 应发工资
A01 2009 03 B部门 700 500 300 100 1600
A02 2008 01 C部门 800 400 600 200 2000


其中应发工资项目是根据:nk1+nk2+nk3+nk4这个公式计算来的。应为该项目不是输入项目!!


...全文
88 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongxingqiche 2009-04-06
  • 打赏
  • 举报
回复
感谢各位高手啊。太谢谢了!!!
sdhdy 2009-04-06
  • 打赏
  • 举报
回复

create table gz(ygbh varchar(5), nian int, yue varchar(2) , bmmc varchar(20), nk1 int, nk2 int, nk3 int, nk4 int, nk5 int)
go
insert gz select 'A01', 2009 , '03', 'B部门', 700 , 500 , 300, 100, 0
insert gz select 'A02' , 2008 , '01' , 'C部门' , 800 , 400 , 600 , 200, 0
go
create table xm(id varchar(5), xmmc varchar(20), xmlx varchar(20), gs varchar(50) )
go
insert xm select 'nk1' , '岗位工资' , '输入项目' , null
insert xm select 'nk2' , '金额' , '输入项目' , null
insert xm select 'nk3' , '工龄' , '输入项目' , null
insert xm select 'nk4' , '养老' , '输入项目' , null
insert xm select 'nk5' , '应发工资', '计算项目', 'nk1+nk2+nk3+nk4 '
go
declare @sql varchar(8000)
set @sql=''

select @sql=@sql+',['+xmmc+']='+isnull(gs,id) from xm

set @sql='select ygbh, nian, yue, bmmc '+@sql+' from gz'

exec(@sql)
/*
ygbh nian yue bmmc 岗位工资 金额 工龄 养老 应发工资
----- ----------- ---- -------------------- ----------- ----------- ----------- ----------- -----------
A01 2009 03 B部门 700 500 300 100 1600
A02 2008 01 C部门 800 400 600 200 2000

*/
zhongxingqiche 2009-04-06
  • 打赏
  • 举报
回复
感谢各位高手的指导,感谢达人!!!
yygyogfny 2009-04-06
  • 打赏
  • 举报
回复

create table A(ygbh varchar(20), nian int , yue int, bmmc varchar(20), nk1 int,nk2 int,nk3 int,nk4 int ,nk5 int)
insert into A select 'a01',2009,03,'b部门',700,500,300,100,0
insert into A select 'a02',2008,01,'c部门',800,400,600 ,200,0


create table B(id varchar(10),xmmc varchar(10),xmlx nvarchar(20),gs nvarchar(100))
insert into B select 'nk1','岗位工资','输入项目',null
insert into B select 'nk2','金额' ,'输入项目',null
insert into B select 'nk3','工龄' ,'输入项目',null
insert into B select 'nk4','养老','输入项目',null
insert into B select 'nk5','应发工资 ','计算项目','nk1+nk2+nk3+nk4'
go

--创建存储过程
create procedure tt2
as
begin
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',['+xmmc+']='+ isnull(gs,id) from B
set @sql='select ygbh ,nian , yue , bmmc, '+stuff(@sql,1,1,'')+' from A'

exec(@sql)
end

--执行结果

exec tt2
go
ygbh nian yue bmmc 岗位工资 金额 工龄 养老 应发工资
-------------------- ----------- ----------- -------------------- ----------- ----------- ----------- ----------- -----------
a01 2009 3 b部门 700 500 300 100 1600
a02 2008 1 c部门 800 400 600 200 2000

(2 row(s) affected)
liangCK 2009-04-06
  • 打赏
  • 举报
回复
如果用xm的nk5替换成gz的nk5列,还要搞搞..

吃饭了.
zhongxingqiche 2009-04-06
  • 打赏
  • 举报
回复
公式是不固定的,是用户在前台程序根据实际编辑的!!1
liangCK 2009-04-06
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: #gz
IF OBJECT_ID('tempdb.dbo.#gz') IS NOT NULL DROP TABLE #gz
CREATE TABLE #gz (ygbh VARCHAR(3),nian INT,yue VARCHAR(2),bmmc VARCHAR(5),nk1 INT,nk2 INT,nk3 INT,nk4 INT,nk5 INT)
INSERT INTO #gz
SELECT 'A01',2009,'03','B部门',700,500,300,100,0 UNION ALL
SELECT 'A02',2008,'01','C部门',800,400,600,200,0

--> 生成测试数据: #xm
IF OBJECT_ID('tempdb.dbo.#xm') IS NOT NULL DROP TABLE #xm
CREATE TABLE #xm (id VARCHAR(3),xmmc VARCHAR(8),xmlx VARCHAR(8),gs VARCHAR(15))
INSERT INTO #xm
SELECT 'nk1','岗位工资','输入项目',null UNION ALL
SELECT 'nk2','金额','输入项目',null UNION ALL
SELECT 'nk3','工龄','输入项目',null UNION ALL
SELECT 'nk4','养老','输入项目',null UNION ALL
SELECT 'nk5','应发工资','计算项目','nk1+nk2+nk3+nk4'

--SQL查询如下:

DECLARE @sql VARCHAR(8000);
SET @sql='';
SELECT @sql=@sql+','+gs+' AS ['+xmmc+']'
FROM #xm
WHERE xmlx='计算项目';


EXEC ('SELECT *'+@sql+' FROM #gz');


DROP TABLE #xm,#gz;

/*
ygbh nian yue bmmc nk1 nk2 nk3 nk4 nk5 应发工资
---- ----------- ---- ----- ----------- ----------- ----------- ----------- ----------- -----------
A01 2009 03 B部门 700 500 300 100 0 1600
A02 2008 01 C部门 800 400 600 200 0 2000

(2 行受影响)

*/
zhongxingqiche 2009-04-06
  • 打赏
  • 举报
回复
还请高手给出一点代码,小弟感激不尽!!!
中国风 2009-04-06
  • 打赏
  • 举报
回复
xm --gs 列 的公式固定時只有用動態
中国风 2009-04-06
  • 打赏
  • 举报
回复
用靜態一個個列拼

用動態調用系統表 syscolumns
ws_hgo 2009-04-06
  • 打赏
  • 举报
回复
来晚了
LZ不懂动态 sql
可以看下这个
http://blog.csdn.net/ws_hgo/archive/2009/03/17/3999394.aspx

22,210

社区成员

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

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