1

我在 Oracle 上做了很多查询,现在我正在使用 SQL Server。我看到了在sql server(东西)中使用类似函数的方式,比如oracle中的listagg。

    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 是正确的,但结果不是。

注意与 id 1 相关的记录

例如,目标是前 2 行,结果为 1 - RH,Planta Brasilia

哪里有问题 ?

4

4 回答 4

3

你应该distinct id_question首先inner join喜欢tb_departament 这个

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
于 2017-05-24T02:33:55.660 回答
0

id_Question 缺少组...

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
于 2017-05-24T00:14:35.090 回答
0
CREATE TABLE tblSample (
EMPNAME VARCHAR(10)
,DEPTNAME VARCHAR(10)
,LEAVETYPE VARCHAR(20)
,TOTALLEAVE INT
);

    INSERT INTO tblSample (EMPNAME, DEPTNAME, LEAVETYPE, TOTALLEAVE)
        VALUES ('ANDREW','CSE','SICKLEAVE',3)
            ,('GEORGE','IT','CASUALLEAVE',1)
            ,('ANDREW','CSE','CASUALLEAVE',2)
            ,('GEORGE','IT','SICKLEAVE',2);

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
-----------------------------------------------
于 2017-05-24T01:53:46.127 回答
0

感谢帮助,这里最终的 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
于 2017-05-24T13:03:33.513 回答