Транспонировать запрос создает узлы (SQL Server 2008) - PullRequest
0 голосов
/ 12 декабря 2011

Я наконец-то нашел запрос для выполнения, чтобы получить все идентификаторы (через запятую) для одного контента в одной строке.

Следующий запрос помог:

Вам не нужно смотреть на запрос, потому что он уже делает то, что должен.

SELECT 
    taxonomy_item_id, 
    SUBSTRING(
      (SELECT ', ' + CAST(taxonomy_id AS varchar) AS Expr1
       FROM taxonomy_item_tbl AS t2
       WHERE (t1.taxonomy_item_id = taxonomy_item_id) AND (taxonomy_language_id = 2067)
       ORDER BY taxonomy_item_id, taxonomy_id FOR XML PATH('')
      ), 1, 1000) AS taxonomy_ids
FROM 
    taxonomy_item_tbl AS t1
WHERE 
    (taxonomy_language_id = 2067) AND (taxonomy_item_id = 180555)
GROUP BY 
    taxonomy_item_id

Единственная проблема заключается врезультат данных, который я получаю:

180555  |   <Expr1>, 404</Expr1><Expr1>, 405</Expr1><Expr1>, 723</Expr1><Expr1>, 1086</Expr1><Expr1>, 1087</Expr1><Expr1>, 1118</Expr1><Expr1>, 1124</Expr1><Expr1>, 1126</Expr1>

Мне не нужны узлы <Expr1>.Есть ли способ удалить это?Если я удаляю AS Expr1 в запросе, он автоматически добавляется обратно

Спасибо

1 Ответ

0 голосов
/ 12 декабря 2011

Если вы не хотите <Expr1> - тогда просто не просите его!

У вас есть:

(SELECT ', ' + CAST(taxonomy_id AS varchar) AS Expr1

Это AS Expr1 вызывает <Expr1>чтобы быть добавленным - так что просто не иметь этого выражения там.

Попробуйте

SELECT 
    taxonomy_item_id, 
    SUBSTRING(
      (SELECT ', ' + CAST(taxonomy_id AS VARCHAR) 
       FROM dbo.taxonomy_item_tbl AS t2
       WHERE t1.taxonomy_item_id = taxonomy_item_id
       AND taxonomy_language_id = 2067
       ORDER BY taxonomy_item_id, taxonomy_id 
       FOR XML PATH('')
      ), 1, 1000) AS taxonomy_ids
FROM 
    dbo.taxonomy_item_tbl AS t1
WHERE 
    taxonomy_language_id = 2067
    AND taxonomy_item_id = 180555
GROUP BY 
    taxonomy_item_id
...