2012-02-07 2 views
0

Я пытаюсь создать список, разделенный запятыми, и я использую производную таблицу. Но я не могу объявить переменную в пределах LEFT OUTER JOIN ... как я могу это сделать?SQL: Как я могу объявить переменную внутри производной таблицы?

LEFT OUTER JOIN (

       DECLARE @String AS VARCHAR(MAX) = NULL 
       SELECT @String = COALESCE(@String + ', ','') + Name 
       FROM MyTable 
       SELECT @String, Col1 
       FROM MyTable 
       GROUP BY Col1 

    ) AS T8 
    ON This = That 

Это дает мне ошибку на Declare ключевое слово, которое говорит, неправильный синтаксис.

Спасибо!

ответ

2

Вы не можете объявить переменную внутри производной таблицы.

Но вы можете объявить его вне заявление и использовать его таким же образом, как вы делали в вашем примере

+0

Я пробовал это, и он подчеркивает «+ имя», давая ошибку: выражение небулевого типа, указанное в контексте, в котором ожидается условие. – daveomcd

+0

, в какой таблице есть столбец «Имя»? – Tim

+0

Имя является частью MyTable – daveomcd

2

Ваше требование не имеет смысла, потому что переменная не может быть действительно использован в переменной таблицы , И если вы хотите использовать его после переменной таблицы, это все равно не имеет смысла ... вы ожидаете несколько экземпляров переменной, один раз для каждого отдельного значения Col1? Возможно, вы имели в виду это:

LEFT OUTER JOIN 
(
    SELECT Col1, String = STUFF((
    SELECT ',' + Name 
     FROM dbo.MyTable AS i 
     WHERE i.Col1 = o.Col1 
     FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'),1,1,'') 
    FROM dbo.MyTable AS o 
    GROUP BY Col1 
) AS T8 
ON This = That 

Однако T8 меня пугает немного. Сколько таблиц уже задействовано в этом соединении?

+0

Я не буду лежать в данный момент, 8 ... лучше бы сделать вид, а затем оттуда? – daveomcd

+0

Не достаточно информации для ответа на этот вопрос. Возможно, если вы разместите весь свой запрос в виде отдельного вопроса, включая структуру таблицы, некоторые примеры данных и желаемые результаты, и попросите помочь сделать ее более оптимизированной. Присоединение в 8 таблиц кажется немного большим для меня, но это связано с исключительно звездным соединением, связанным с DW. –