gpt4 book ai didi

sql - 如何在 SQL Server 中连接两个查询的结果?

转载 作者:太空狗 更新时间:2023-10-30 01:50:36 25 4
gpt4 key购买 nike

这是我今天的第二个 SQL 问题 - 我是 DBA 方面的新手...

我正在尝试将一个复杂的 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 的结构,但它返回两行!而且我无法弄清楚如何将其更新为只返回一个 - 非常感谢收到的任何帮助!!

一如既往的感谢!

最佳答案

这只需一个查询即可完成。 IN 子句只是 A.Type = 'School' OR A.Type = 'Parent'

的一种奇特表达方式
SELECT 
A.Id, 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 IN ('School','Parent')

关于sql - 如何在 SQL Server 中连接两个查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4875696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com