2017-02-20 34 views
0

複数の行を1つのエントリに結合するStuffコマンドを試行しています。私は "マルチパート識別子" SPCLT.CD_VAL_DESC "をバインドできませんでした。マルチパート識別子をバインドできませんでした - stuff cmd

STUFF(
    (SELECT 
     **',' + SPCLT.CD_VAL_DESC** 
    FROM 
     (
     SELECT DISTINCT 
      SPCLT.CD_VAL_DESC SPECIALTY 
    FROM PIN_STATUS PS 

    INNER JOIN PROV_TYPE_SPCLT SPC 
     ON PS.PROV_ID = SPC.PROV_ID 
     AND SPC.VLDT_IND = 'Y' 

    INNER JOIN CODE_REF SPCLT 
    ON SPC.SPCLT_CD = SPCLT.CD_VAL 
    AND SPCLT.CD_REF_NM = 'SPECIALTY' 
    AND SPCLT.VLDT_IND = 'Y' 

WHERE SPC.VLDT_IND = 'Y' 
) SPCLTY 
    for xml 
        path('') 
       ) 
       ,1,1,'') SPECIALTIES 
+1

サブクエリで 'CD_VAL_DESC'のエイリアスを付けているので、' SPCLTY .SPECIALTY'にする必要があります。 –

+0

まず、どのDBMSですか?私はMS SQL Serverを想定していますが、確認する必要があります。第2に、SQL Serverでは、「STUFF」は関数であり、コマンドではありません。あなたはあなたの問題を説明するコマンドとしてそれを使用しようとしているようです。 – RBarryYoung

+0

私は最初もそれを考えましたが、私はまだ同じエラーが発生します。 複数部分の識別子 "SPCLT.SPECIALTY"はバインドできませんでした。 – Christy

答えて

0

(最初のSELECT文の下に)あなたは誰にでも起こる...あなたのSQLの形式に注意を払うようにして、答えはおそらく飛び出すと鼻であなたをかむだろう必要があります。

あなたのクエリ:

STUFF(
    (
    SELECT 
     ',' + SPCLT.CD_VAL_DESC 
    FROM 
     (
     SELECT DISTINCT 
      SPCLT.CD_VAL_DESC SPECIALTY 
     FROM PIN_STATUS PS 

     INNER JOIN PROV_TYPE_SPCLT SPC 
      ON PS.PROV_ID = SPC.PROV_ID 
      AND SPC.VLDT_IND = 'Y' 

     INNER JOIN CODE_REF SPCLT 
      ON SPC.SPCLT_CD = SPCLT.CD_VAL 
      AND SPCLT.CD_REF_NM = 'SPECIALTY' 
      AND SPCLT.VLDT_IND = 'Y' 

     WHERE SPC.VLDT_IND = 'Y' 
     ) SPCLTY 
    for xml path('') 
    ) 
,1,1,'') SPECIALTIES 

は...サブクエリに分割されています。 STUFF()機能は、その下の最初のSELECTで機能しています。

その最初のSELECTは、というサブクエリを取得しています。サブクエリは、SPCLTYというエイリアスになっています。だから当然、SELECTの中では、ではなく、SPCLTYを参照する必要があります。

空白文字を少し追加すると、少し明確になります。

関連する問題