Sql server SQL的东西不起作用,为什么?
我在Oracle上做了很多查询,现在我正在使用SQL Server。 我在SQLServer中看到了使用类似于oracle的Listag函数的方法Sql server SQL的东西不起作用,为什么?,sql-server,aggregate-functions,listagg,Sql Server,Aggregate Functions,Listagg,我在Oracle上做了很多查询,现在我正在使用SQL Server。 我在SQLServer中看到了使用类似于oracle的Listag函数的方法 Select sqd.id_question, STUFF((Select ',' + nm_departament from tb_departament where sqd.id_departament = id_departament for xml path('')),1,1,'') nm_departements f
Select
sqd.id_question,
STUFF((Select ',' + nm_departament from tb_departament where sqd.id_departament = id_departament for xml path('')),1,1,'') nm_departements
from
tb_survey_question_departament sqd
sintax是正确的,但结果不正确
我们的目标是拥有例如2个顶排,结果是1-RH,巴西足底
问题在哪里?缺少按id分组的问题
Select
sqd.id_question,
STUFF((Select ',' + nm_departament from tb_departament where sqd.id_departament = id_departament for xml path('')),1,1,'') nm_departements
from
tb_survey_question_departament sqd
group by sqd.id_question
你应该先明确身份证问题,然后像这样加入tb部门
Select
sqd.id_question,
STUFF((
SELECT ',' + td.nm_departament
from tb_departament td
INNER JOIN tb_survey_question_departament sqd1 ON sqd1.id_departament = td.id_departament
WHERE sqd1.id_question = sqd.id_question
FOR XML PATH('')
)
,1,1,'') AS nm_departements
from
(
SELECT DISTINCT sqd.id_question
FROM tb_survey_question_departament sqd
) sqd
感谢大家的帮助,这里的最终sql运行良好:
Select
sqd.id_question,
que.ds_question,
STUFF((
SELECT ',' + td.nm_departament
from tb_departament td
INNER JOIN tb_survey_question_departament sqd1 ON sqd1.id_departament = td.id_departament
WHERE sqd1.id_question = sqd.id_question
FOR XML PATH('')
)
,1,1,'') AS nm_departements
from
(
SELECT DISTINCT sqd.id_question
FROM tb_survey_question_departament sqd
) sqd
inner join tb_survey_question que on sqd.id_question = que.id_question
不,这行不通。这只会引发一个错误,因为GROUPBY SQL将无法正确地对内容进行分组。问题在于STUFF语句本身,因为它没有正确地连接到外部查询,但是在没有看到示例数据的情况下,很难推荐如何修复它。是的,如果我放入group,您是对的。问题是:列“tb\u survey\u question\u department.id\u department”在选择列表中无效,因为它不包含在聚合函数或group BY子句中。数据存在我在前两行显示的问题,即一个id_问题有一个或多个id_部门关联,因此我只需要按id_问题显示一行并聚合“n”departements@MCunha98您的资料应该如下所示:STUFFSELECT',“+d.nm_从tb_出发作为d加入tb_调查_问题_出发作为sqd2上的sqd2.id_出发=d.id_出发,其中sqd2.id_出发=sqd.id_出发作为XML路径1,1,您可以尝试我的答案@MCunha98
SELECT EMPNAME
,DEPTNAME
,STUFF((
SELECT ',' + LEAVETYPE + '-' + CAST(TOTALLEAVE AS VARCHAR(5))
FROM tblSample
WHERE EMPNAME = T.EMPNAME
AND DEPTNAME = T.DEPTNAME
FOR XML PATH('')
), 1, 1, '') AS LEAVETYPE
,SUM(TOTALLEAVE) AS TOTALLEAVE
FROM tblSample T
GROUP BY EMPNAME
,DEPTNAME
-----------------------------------------------
Select
sqd.id_question,
STUFF((
SELECT ',' + td.nm_departament
from tb_departament td
INNER JOIN tb_survey_question_departament sqd1 ON sqd1.id_departament = td.id_departament
WHERE sqd1.id_question = sqd.id_question
FOR XML PATH('')
)
,1,1,'') AS nm_departements
from
(
SELECT DISTINCT sqd.id_question
FROM tb_survey_question_departament sqd
) sqd
Select
sqd.id_question,
que.ds_question,
STUFF((
SELECT ',' + td.nm_departament
from tb_departament td
INNER JOIN tb_survey_question_departament sqd1 ON sqd1.id_departament = td.id_departament
WHERE sqd1.id_question = sqd.id_question
FOR XML PATH('')
)
,1,1,'') AS nm_departements
from
(
SELECT DISTINCT sqd.id_question
FROM tb_survey_question_departament sqd
) sqd
inner join tb_survey_question que on sqd.id_question = que.id_question