这是我今天的第二个SQL问题 - 我是一个DBA的东西新手...如何在SQL Server中连接两个查询的结果?
我想联合在一起一个复杂的SQL查询合并约12表中的数据到1单表。尽管数据库中有一对多的关系,但我知道每个关系的最大数量是多少。
所以,我有(!堆栈溢出的帮助下)拉平我的数据库的第一级,并有一对查询,现在必须结合在一起:
(有删节)
SELECT
A.StudentId, C1.Topic AS SIoC1, C1.Level AS SIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'School'
SELECT
A.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'Parent'
是否可以将查询命名为别名?
或者我还能怎么加入这两个查询,以输出类似:
| A.Id | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
**更新** 其背后的域是一个评估进行,在这两个学校和家长必须报告。所以单行标识了一个既有学校价值又有父母价值的评估。
我正在使用SQL Server 2005.
谢谢!
*进一步更新* 该查询似乎做的工作......
SELECT PreConcerns.StudentId, TIoC1, TIoCScore1, PIoC1, PIoCScore1
FROM
Assessment PreConcerns
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS TIoC1, C1.Level AS TIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'School'
) scons
ON scons.StudentId= PreConcerns.StudentId
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'Parent'
) pcons
ON pcons.StudentId = PreConcerns.StudentId
进一步的更新(坐2!)** (我不知道如果我应该重新打开这个新的问题??) 我今天回到工作,发现我的上述'解决方案'没有完全解决问题 - 它为每次评估创建两行。
因此,要回顾一下,我有以下表格:那么对于系统中的每个学生
Student (int:id, varchar(50):name)
Assessment (int:id, date:date, int:StudentId,)
Concern (int:id, int:assessment_id, varchar(20):topic, int:level)
是完全有两次评估 - 一个有型“学校”,和一个与类型“父”。
我想创建一个单列它结合了评估和担忧:
(伪列:)
| Assessment.StudentId | SchoolConcernTopic | SchoolConcernLevel | ParentConcernTopic | ParentConcernLevel |
或从上面的SQL:
| PreConcerns.StudentId | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
只有一个每个学生都有一排排,这两个评估结合在一起。 我有这个工作与上述SQL的结构,但它返回两行!而我无法解决如何更新这个只返回一个 - 任何帮助感激地收到!
一如既往的感谢!
我已经更新了我的问题的一些领域背景 - 谢谢 – laura 2011-02-02 14:56:21