【发布时间】:2011-02-03 12:31:12
【问题描述】:
这是我昨天的SQL joining dilemma 的延续...
我有以下表格:
(Student)
| ID | NAME |
| 1234 | dave |
(Assessment)
| ID | DATE | STUDENT_ID | TYPE |
| 1 | 02/03/11 | 1234 | School |
| 2 | 05/03/11 | 1234 | Parent |
(Concern)
| ID | ASSESSMENT_ID | TOPIC | LEVEL | TOPIC_NUMBER |
| 1 | 1 | apple | 3 | 1 |
| 2 | 1 | pears | 2 | 2 |
| 3 | 2 | mango | 2 | 1 |
| 4 | 2 | dates | 4 | 2 |
我想创建一个组合评估和关注点的单行:
| StudentId | TIoC1 | TIoC2 | TIoCScore1 | TIoCScore2 | PIoC1 | PIoC2 | PIoCScore1 | PIoCScore2 |
| 1234 | apple | pears | 3 | 2 | mango | dates | 2 | 4 |
这是要导出到一个统计包,所以结构必须保持原样。
这是我现在的 SQL:
SELECT a_assessment.StudentId,
TIoC1,TIoC2,TIoCScore1,TIoCScore2,PIoC1,PIoC2,PIoCScore1,PIoCScore2
FROM
dbo.Assessment a_assessment
LEFT OUTER JOIN
(
SELECT P.StudentId, C1.Topic AS TIoC1, C2.Topic AS TIoC2, C3.Topic AS TIoC3, C4.Topic AS TIoC4,
C1.Level AS TIoCScore1, C2.Level AS TIoCScore2, C3.Level AS TIoCScore3, C4.Level AS TIoCScore4
FROM dbo.Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
LEFT JOIN Concern C2 ON P.Id = C2.Assessment_Id and C2.TopicNumber = 2
WHERE P.Type = 'School'
) a_school_cons
ON a_school_cons.StudentId = a_assessment.StudentId
LEFT OUTER JOIN
(
SELECT P.StudentId, C1.Topic AS PIoC1, C2.Topic AS PIoC2
C1.Level AS PIoCScore1, C2.Level AS PIoCScore2
FROM dbo.Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
LEFT JOIN Concern C2 ON P.Id = C2.Assessment_Id and C2.TopicNumber = 2
WHERE P.Type = 'Parent'
) a_parent_cons
ON a_parent_cons.StudentId = a_assessment.StudentId
问题是,它返回两个相同的行!
| StudentId | TIoC1 | TIoC2 | TIoCScore1 | TIoCScore2 | PIoC1 | PIoC2 | PIoCScore1 | PIoCScore2 |
| 1234 | apple | pears | 3 | 2 | mango | dates | 2 | 4 |
| 1234 | apple | pears | 3 | 2 | mango | dates | 2 | 4 |
我不知道如何更新它以只返回一个 - 任何帮助都非常感激!
一如既往的感谢!
【问题讨论】:
-
您还可以查看我对您提到的原始问题的回答的编辑版本。编辑答案时可能不会向 OP 发送通知,因此您只是错过了它。
-
谢谢安德烈,我没有收到通知。我今天将测试您的分组建议 - 感谢您的所有帮助!
标签: sql sql-server join