2017-05-24 1 views
0

私はOracle上でたくさんの質問をしましたが、今はSQL Serverで作業しています。 SQL Server(oracle)のoracleのlistaggのような同様の機能を使う方法を見ました。SQL STUFFが動作しません、なぜですか?

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 

それは正しいが、結果はない。

Notice the records related to id 1

目標は1として、2トップの行のために、たとえば、結果を持っている - RH、プランタブラジリア

どこに問題がありますか? id_Questionによってグループがありません

答えて

1

あなた最初distinct id_questioninner 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 
+0

TRIVに感謝します。 – MCunha98

0

...

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 
+0

いいえ、これは動作しません。これは、グループのためにエラーが発生するだけです(結果としてSQLはSTUFFを適切にグループ化できません)。この問題は、外側のクエリに正しく結合されていないため、STUFFステートメント自体で問題が発生しますが、サンプルデータが表示されないため、これを修正する方法を推奨することは困難です。 – ZLK

+0

グループを配置すると正しいと思います。 カラム 'tb_survey_question_departament.id_departament'は、集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。 データには最初の2行に表示される問題があります。つまり、id_questionには1つ以上のid_departementのアソシエートがあるため、id_questionで行のみを表示し、 'n' departementsを集計する必要があります。 – MCunha98

+0

@ZLK : https://s19.postimg.org/53ltdzb6r/Capturar.png – MCunha98

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 
----------------------------------------------- 
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 
関連する問題