Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联接表上的SQL行连接_Sql_Sql Server - Fatal编程技术网

联接表上的SQL行连接

联接表上的SQL行连接,sql,sql-server,Sql,Sql Server,我读过类似的文章,但无法让我的查询起作用 以下是我所拥有的: 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]

我读过类似的文章,但无法让我的查询起作用

以下是我所拥有的:

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
当[Skills Used]仅为1时,这可以正常工作,但如果超过1,我假设它将返回第一个技能或结果中的重复行

有没有办法将[Skills]查询的结果放入字符串中,例如:

技能1,技能2,技能3

如果这是一个重复的问题,很抱歉,但我对复杂的SQL查询还很陌生。

Code:
将此字段用作查询中的一个字段。

多亏了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]

有一种方法可以将这样的技能结合起来。然而,由于您加入tblRawScore的方式,您每行只能获得一项技能(因此您将获得多行技能)。您可以将联接移动到子查询中,但不能引用tblRawScore以获取要在外部查询中选择的其他内容。你可以把它放在两个地方,但是你会得到每一个技能的一行,显示该技能的分数,然后结合使用的技能下的所有技能。话虽如此,你想要什么?谢谢,对我的目的来说不太合适,但是[让我走上正确的道路。非常感谢。我在我的答案中添加了where子句。再试一次。现在应该效果更好了。是的,太好了。谢谢你的帮助。
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]