一个不太简单的问题!(分不够再加)

cctaiyang 2006-08-31 03:52:44
有两个表
表A
ID Name Sex sortID
1 张三 男 01
2 李四 女 01
3 王五 男 02
表B
ID tzID tzName tzValue sortID
1 n1 基本工资 500 01
2 n2 奖金 100 01
3 n3 加班 50 01
4 n1 基本工资 200 02
5 n2 其他 20 02

现在我想得到这样的结果该怎么做呢??

姓名 性别 基本工资 奖金 加班
张三 男 500 100 50
李四 女 500 100 50

解决立马结贴!!!
...全文
266 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjz_1209 2006-08-31
  • 打赏
  • 举报
回复
Select a.姓名,a.性别,基本工资=(select b.tzValue from b where b.tzName='基本工资' and a.sortID=b.sortID),奖金=(select b.tzValue from b where b.tzName='奖金' and a.sortID=b.sortID),加班=(select b.tzValue from b where b.tzName='加班' and a.sortID=b.sortID)
from a where a.sortID = 01

Select a.姓名,a.性别,基本工资=(select b.tzValue from b where b.tzName='基本工资' and a.sortID=b.sortID),其他=(select b.tzValue from b where b.tzName='其他' and a.sortID=b.sortID)
from a where a.sortID = 02
xyxfly 2006-08-31
  • 打赏
  • 举报
回复
晕,楼上都写过了,没刷新 -_-
xyxfly 2006-08-31
  • 打赏
  • 举报
回复
Select a.name,a.sex,
基本工资=sum(case when b.tzName='基本工资' then b.tzvalue else 0 end),
奖金=sum(case when b.tzName='奖金' then b.tzvalue else 0 end),
加班=sum(case when b.tzName='加班' then b.tzvalue else 0 end)
from a inner join b on a.sortid=b.sortid where a.sortID='01'group by a.name,a.sex
name sex 基本工资 奖金 加班
-------------------- ---------- ----------- ----------- -----------
张三 男 500 100 50
李四 女 500 100 50
specialsoldier 2006-08-31
  • 打赏
  • 举报
回复
楼主主要是想实现动态字段是吧,用存储过程判断吧:
create proc my_proc(@sortid int)
as
begin
if @sortid=2
Select a.姓名,a.性别,
sum(case when b.tzName='基本工资' then b.tzvalue else 0 end)[基本工资],
sum(case when b.tzName='其他' then b.tzvalue else 0 end)[其他]
from a inner join b on a.sortid=b.sortid and a.sortid=2
group by a.姓名,a.性别
else
Select a.姓名,a.性别,
sum(case when b.tzName='基本工资' then b.tzvalue else 0 end)[基本工资],
sum(case when b.tzName='奖金' then b.tzvalue else 0 end)[奖金],
sum(case when b.tzName='其他' then b.tzvalue else 0 end)[其他]
from a inner join b on a.sortid=b.sortid and a.sortid=1
group by a.姓名,a.性别
end
achongsky 2006-08-31
  • 打赏
  • 举报
回复
--try

create table 表A
(ID int,name varchar(10),Sex varchar(2),sortID varchar(2))
create table 表B
(ID int,tzID varchar(10),tzName varchar(20),tzValue money,sortID varchar(2))

insert 表A
select 1,'张三','男','01'
insert 表A
select 2,'李四','女','01'
insert 表A
select 3,'王五','男','02'

insert 表B
select 1,'n1','基本工资',500,'01'
insert 表B
select 1,'n2','奖金',100,'01'
insert 表B
select 1,'n3','加班',50,'01'
insert 表B
select 1,'n1','基本工资',200,'02'
insert 表B
select 1,'n2','其他',20,'02'



select a.ID as ID,
a.name as 姓名,
(select tzValue from 表B where sortID=a.sortID and tzName='基本工资') as 基本工资,
(select tzValue from 表B where sortID=a.sortID and tzName='奖金') as 奖金,
(select tzValue from 表B where sortID=a.sortID and tzName='加班') as 加班
from 表A a
where sortid='01'

select a.ID as ID,
a.name as 姓名,
(select tzValue from 表B where sortID=a.sortID and tzName='基本工资') as 基本工资,
(select tzValue from 表B where sortID=a.sortID and tzName='其他') as 其他
from 表A a
where sortid='02'
九斤半 2006-08-31
  • 打赏
  • 举报
回复
不明白什么意思~~~

create table A(ID INT,Name VARCHAR(10),Sex CHAR(2),sortID CHAR(2))
insert A
SELECT 1,'张三','男','01' UNION ALL
SELECT 2,'李四','女','01' UNION ALL
SELECT 3,'王五','男','02'
--SELECT * FROM A

CREATE TABLE B(ID INT,tzID VARCHAR(10),tzName VARCHAR(10),tzValue INT,sortID CHAR(2))
INSERT B
SELECT 1,'n1','基本工资',500 ,'01' UNION ALL
SELECT 2,'n2','奖金' ,100 ,'01' UNION ALL
SELECT 3,'n3','加班' ,50 ,'01' UNION ALL
SELECT 4,'n1','基本工资',200 ,'02' UNION ALL
SELECT 5,'n2','其他' ,20 ,'02'
--SELECT * FROM B
GO

CREATE PROC SP_TEST
@SORTID CHAR(2)
AS
IF @SORTID='01'
BEGIN
SELECT
NAME,
SEX,
基本工资=(SELECT ISNULL(TZVALUE,0) FROM B WHERE SORTID=A.SORTID AND TZNAME='基本工资'),
奖金=(SELECT ISNULL(TZVALUE,0) FROM B WHERE SORTID=A.SORTID AND TZNAME='奖金'),
加班=(SELECT ISNULL(TZVALUE,0) FROM B WHERE SORTID=A.SORTID AND TZNAME='加班')
FROM A
WHERE SORTID='01'
END

IF @SORTID='02'
BEGIN
SELECT
NAME,
SEX,
基本工资=(SELECT ISNULL(TZVALUE,0) FROM B WHERE SORTID=A.SORTID AND TZNAME='基本工资'),
其他=(SELECT ISNULL(TZVALUE,0) FROM B WHERE SORTID=A.SORTID AND TZNAME='其他')
FROM A
WHERE SORTID='02'
END
GO
EXEC SP_TEST '01'

DROP PROC SP_TEST
DROP TABLE A,B
WangZWang 2006-08-31
  • 打赏
  • 举报
回复
--为2的用下面这条
Select a.姓名,a.性别,
基本工资=sum(case when b.tzName='基本工资' then b.tzvalue else 0 end),
其他=sum(case when b.tzName<>'基本工资' then b.tzvalue else 0 end)
from a inner join b on a.sortid=b.sortid group by a.姓名,a.性别
fcuandy 2006-08-31
  • 打赏
  • 举报
回复
看不懂.为何第一二个人有,第三个人没有.

如果换种理解方法,前三条记录对应第一个人,那么后两条对应第二个人,第二个人的加班费又从哪来的
cctaiyang 2006-08-31
  • 打赏
  • 举报
回复
当 sortID=01时结果为
姓名 性别 基本工资 奖金 加班
张三 男 500 100 50
李四 女 500 100 50
当 sortID=02时结果为
姓名 性别 基本工资 其他
王五 男 200 20

34,576

社区成员

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

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