消息关闭
    暂无新消息!

跪求大神解答一个多表联查问题

问题作者 : Borne2017-08-31发布
A表有人员的(编号,成绩),B表有人员的(编号,姓名)C表是人员的每天出勤状况(附:是一列有人员姓名的签到)。
需求是,统计C表的出勤天数是成绩的1类,A表的成绩是2类,并结合A表加B表的信息现实出来
A表:
编号      成绩
26          85
 B表:
姓名      编号
小明       26
C表:
日期     考勤
8.1       小明
8.2       小明
8.3       小明
.
.
.

姓名    成绩       类别
小明     85          2
小明      21        1

3个回答

︿ 1
这样吗?
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([编号] int,[成绩] int)
Insert #A
select 26,85
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([姓名] nvarchar(22),[编号] int)
Insert #B
select N'小明',26
GO
if not object_id(N'Tempdb..#C') is null
drop table #C
Go
Create table #C([日期] decimal(18,7),[考勤] nvarchar(22))
Insert #C
select 8.1,N'小明' union all
select 8.2,N'小明' union all
select 8.3,N'小明'
Go
--测试数据结束
SELECT * FROM (
SELECT  姓名 ,
        成绩 ,
        2 AS 类别
FROM    #B
        JOIN #A ON #A.编号 = #B.编号
UNION
SELECT  姓名 ,
        COUNT(1) AS 成绩 ,
        1 AS 类别
FROM    #B
        JOIN #C ON 姓名 = 考勤
GROUP BY 姓名)t
ORDER BY t.姓名,类别 DESC