2012-05-21 2 views
0

У меня есть запрос, который выглядит как этогоSQL Server Left присоединиться к «С» столом

WITH CTE AS 
(
SELECT 
    ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,JobsTagMap.JobID 
FROM JobsTagMap 
) 
SELECT 
    *, 
    STUFF((SELECT ',' + Title 
      FROM Tags 
      JOIN JobsTagMap ON Tags.TagID = JobsTagMap.TagID 
      WHERE JobsTagMap.JobID = CTE.JobID 
      FOR XML PATH('') 
     ), 1, 1, '') AS Title 
FROM CTE 
WHERE CTE.RowNbr = 1 

Теперь я хочу сделать что-то вроде этого (выше запроса именуемого «мой большой запроса»)

SELECT * FROM Jobs LEFT JOIN ('my big query') q on Jobs.JobID=q.JobID 

Но когда я делаю это, я получаю ошибку

Неправильный синтаксис около ключевого слова «с». Если этот оператор является общим табличным выражением, предложение xmlnamespaces или контекстное предложение отслеживания изменений , предыдущий оператор должен быть прерван точкой с запятой .

Как я могу присоединиться к такому запросу?

ответ

1

Попробуйте это:

;WITH Cte AS 
(
    SELECT Row_number() OVER(partition BY JobID ORDER BY JobID) AS RowNbr, 
     JobsTagMap.JobID 
    FROM JobsTagMap 
), FinalCte AS 
( 
    SELECT*, 
       Stuff ((SELECT ',' + Title 
           FROM Tags 
              JOIN JobsTagMap 
               ON Tags.TagID = JobsTagMap.TagID 
           WHERE JobsTagMap.JobID = CTE.JobID 
           FOR xml path('')), 1, 1, '') AS Title 
    FROM cte 
    WHERE CTE.RowNbr = 1 
) 
SELECT * 
    FROM Jobs LEFT JOIN FinalCte q 
     ON Jobs.JobID=q.JobID 
+0

Отлично! Спасибо! –

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