2014-10-02 78 views
1

我已閱讀完類似的文章,但無法讓我的查詢工作。已加入表格的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查詢來說很新穎。

+0

還有就是技能組合那樣的方式。然而,由於你加入tblRawScore的方式,你每行只能獲得一項技能(因此你將得到多行)。您可以將聯接移動到子查詢中,但是您無法引用tblRawScore作爲其他要在外部查詢中選擇的內容。你可以把它放在兩個地方,但是每個技能都會顯示一行,顯示該技能的分數,然後結合使用技能下的所有技能。這就是說,你想要什麼? – Becuzz 2014-10-02 16:53:36

回答

2

代碼:

STUFF((SELECT ', ' + [Skills Used] 
FROM FROM tblUser AS x LEFT OUTER JOIN tblRawScore AS y ON (x.Id=y.AssignedBy) 
JOIN tblUserType AS z ON (x.UserTypeId=z.Id) WHERE x.ID=u.ID FOR XML PATH('')),1,2,'') 

使用此爲您的查詢的領域之一。

+0

謝謝,我的目的不太合適,但[把我放在正確的道路上。非常感謝你。 – 2014-10-02 17:03:23

+0

我在我的答案中添加了where子句。再試一次。它現在應該會更好。 – 2014-10-02 17:04:19

+0

是的,太好了。感謝您的幫助。 – 2014-10-02 17:17:37

0

感謝jbarker我設法得到它這方面的工作:

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 %], 
STUFF((SELECT ', ' + sk.SkilsName 
     FROM tblskils AS sk 
     WHERE sk.SkilsId=s.SkillId 
     FOR XML PATH('')),1,2,'') AS [Skills Used]