Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server SQL的东西不起作用,为什么?_Sql Server_Aggregate Functions_Listagg - Fatal编程技术网

Sql server SQL的东西不起作用,为什么?

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

我在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
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