我已閱讀完類似的文章,但無法讓我的查詢工作。已加入表格的SQL行連接
這是我有:
SELECT u.Id,
U.FirstName as [Name],
ut.UserType,
COUNT(DISTINCT(s.rawScoreDate)) as [Total Sessions],
COUNT(DISTINCT(s.SkillId)) AS [Skills Used],
SUM(CASE WHEN s.score in (1, 2, 3) THEN 1 ELSE 0 END) AS [Total Scores],
SUM(CASE s.score WHEN 1 THEN 1 ELSE 0 END) AS [1's Scored],
SUM(CASE s.score WHEN 2 THEN 1 ELSE 0 END) AS [2's Scored],
SUM(CASE s.score WHEN 3 THEN 1 ELSE 0 END) AS [3's Scored],
CAST(100.0/NULLIF(SUM(CASE WHEN s.score in (1, 2, 3) THEN 1 ELSE 0 END),0) * SUM(CASE s.score WHEN 1 THEN 1 ELSE 0 END) AS NUMERIC(18,2)) AS [1's %],
CAST(100.0/NULLIF(SUM(CASE WHEN s.score in (1, 2, 3) THEN 1 ELSE 0 END),0) * SUM(CASE s.score WHEN 2 THEN 1 ELSE 0 END) AS NUMERIC(18,2)) AS [2's %],
CAST(100.0/NULLIF(SUM(CASE WHEN s.score in (1, 2, 3) THEN 1 ELSE 0 END),0) * SUM(CASE s.score WHEN 3 THEN 1 ELSE 0 END) AS NUMERIC(18,2)) AS [3's %],
(SELECT SkilsName as skls FROM tblSkils as sk where sk.SkilsId=s.SkillId) as [Skills]
FROM tblUser AS u
LEFT OUTER JOIN tblRawScore AS s ON (U.Id=s.AssignedBy) JOIN tblUserType AS ut ON (u.UserTypeId=ut.Id)
WHERE u.usertypeid=4
GROUP BY u.id, u.FirstName,ut.UserType,s.SkillId
ORDER BY [Total Sessions] DESC
而[技能使用]這工作正常,只有1,但如果有超過1我認爲它要麼返回1號技能或重複的行結果。
有沒有一種方法可以讓我把結果從[技巧]查詢到一個字符串,像這樣:
Skill1,Skill2,Skill3
很抱歉,如果這是一個重複的問題,但我對於複雜的SQL查詢來說很新穎。
還有就是技能組合那樣的方式。然而,由於你加入tblRawScore的方式,你每行只能獲得一項技能(因此你將得到多行)。您可以將聯接移動到子查詢中,但是您無法引用tblRawScore作爲其他要在外部查詢中選擇的內容。你可以把它放在兩個地方,但是每個技能都會顯示一行,顯示該技能的分數,然後結合使用技能下的所有技能。這就是說,你想要什麼? – Becuzz 2014-10-02 16:53:36