2017-02-20 2 views
0

Я пытаюсь создать Cmd 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

Это должно быть 'SPCLTY .SPECIALTY', поскольку вы ввели псевдоним' CD_VAL_DESC' в подзапрос. –

+0

Во-первых, какая СУБД это? Я предполагаю MS SQL Server, но вы должны подтвердить. Во-вторых, в SQL Server «STUFF» - это функция, а не команда. Кажется, вы пытаетесь использовать его в качестве команды, что объясняет вашу проблему. – RBarryYoung

+0

Я думал, что сначала тоже, но я все равно получаю ту же ошибку. Идентификатор из нескольких частей "SPCLT.SPECIALTY" не может быть связан. – Christy

ответ

0

Вы должны обратить внимание на формат вашего 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 принимает данные FROM подзапрос, который был псевдонимом как SPCLTY. Итак, естественно, что в этом SELECT вам необходимо указать SPCLTY, а не SPCLT.

Добавление немного пробелов делает его немного яснее, я думаю.

Смежные вопросы