【发布时间】:2014-07-01 18:53:48
【问题描述】:
我无法在 select sql 语句中围绕嵌套子查询进行思考。基本上我在这里的工作正常,但肯定有一种方法可以使这个查询比下面的当前设置更加动态和优雅:
SELECT Jobs.JobID, Jobs.JobName,
(
SELECT COALESCE(SUM(JobQualifiers.Weight), 0)
FROM Jobs j1
INNER JOIN
JobQualifiers ON j1.JobID = JobQualifiers.JobID
INNER JOIN
Qualifications ON Qualifications.QualificationID = JobQualifiers.QualificationID
INNER JOIN
SubGroupQualifiers sgq ON Qualifications.QualificationID = sgq.QualificationID
INNER JOIN
QualificationSubGroups ON QualificationSubGroups.QualificationSubGroupID = sgq.SubGroupID
WHERE
j1.JobID = Jobs.JobID
AND
QualificationSubGroups.QualificationSubGroupID = 6
) as SubGroup6,
(
SELECT
COALESCE(SUM(JobQualifiers.Weight), 0)
FROM Jobs j2
INNER JOIN
JobQualifiers ON j2.JobID = JobQualifiers.JobID
INNER JOIN
Qualifications ON Qualifications.QualificationID = JobQualifiers.QualificationID
INNER JOIN
SubGroupQualifiers sgq ON Qualifications.QualificationID = sgq.QualificationID
INNER JOIN
QualificationSubGroups ON QualificationSubGroups.QualificationSubGroupID = sgq.SubGroupID
WHERE
j2.JobID = Jobs.JobID
AND
QualificationSubGroups.QualificationSubGroupID = 7
) as SubGroup7,
(
SELECT COALESCE(SUM(JobQualifiers.Weight), 0)
FROM Jobs j3
INNER JOIN
JobQualifiers ON j3.JobID = JobQualifiers.JobID
INNER JOIN
Qualifications ON Qualifications.QualificationID = JobQualifiers.QualificationID
INNER JOIN
SubGroupQualifiers sgq ON Qualifications.QualificationID = sgq.QualificationID
INNER JOIN
QualificationSubGroups ON QualificationSubGroups.QualificationSubGroupID = sgq.SubGroupID
WHERE
j3.JobID = Jobs.JobID
AND
QualificationSubGroups.QualificationSubGroupID = 8
) as SubGroup8
FROM Jobs
我的目标是使子查询选择动态而不是硬编码为具有 Subgroup6、SubGroup7、SubGroup8 等的 QualificationSubGroups.QualificationSubGroupID。我相信我需要一个嵌套子查询,但如何实现它超出了我的范围。这可能是令人难以置信的模棱两可的描述,所以我很乐意根据需要提供更多细节!提前感谢您的任何回复。
【问题讨论】:
-
你可以尝试这样的事情 - SELECT CASE WHEN QualificationSubGroups.QualificationSubGroupID = 6 THEN SUM(JobQualifiers.Weight) ELSE 0 AS SubGroup6 FROM Jobs LEFT JOIN JobQualifiers J1 ON j1.JobID = JobQualifiers.JobID LEFT JOIN Qualifications ON Qualifications.QualificationID = JobQualifiers.QualificationID LEFT JOIN SubGroupQualifiers sgq ON Qualifications.QualificationID = sgq.QualificationID LEFT JOIN QualificationSubGroups ON QualificationSubGroups.QualificationSubGroupID = sgq.SubGroupID
-
我认为即使您最终使用 Pivot,也无法绕过对 SubGroupId 进行硬编码。因此,如果您的子组的数量很小且有限,那么您也可以使用 case 语句