22,181
社区成员




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
*/
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)
---------------------------------
-- 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 行受影响)
*/