Использование SUBSTRING и STUFF вместе - PullRequest
0 голосов
/ 01 февраля 2012

Использование SQL Server 10.0 и 10.5

Я пытаюсь извлечь несколько строк в одну строку и разделить их запятыми в операторе SELECT

Если я сделаю это:

SELECT STUFF(CAST(rating AS VARCHAR),1,0,',')
FROM product_reviews
WHERE product_id = 8995
FOR XML PATH('')

Я получаю желаемый результат за исключением первой запятой.

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

SELECT SUBSTRING(STUFF(CAST(rating AS VARCHAR),1,0,','),2,999)
FROM product_reviews
WHERE product_id = 8995
FOR XML PATH('')

Это удаляет всезапятые.

Далее я пытаюсь это сделать:

SELECT SUBSTRING(ratings,2,999)
FROM (SELECT STUFF(CAST(rating AS VARCHAR),1,0,',') AS ratings
      FROM product_reviews
      WHERE product_id = 8995
      FOR XML PATH('')) tmp

Но это просто дает мне ошибку:

Msg 8155, Level 16, State 2, Line 5
No column name was specified for column 1 of 'tmp'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'ratings'.

Я использовал другие имена для столбца 1 с той же ошибкой

Я знаю, что могу создать процедуру для этого, но это не то, что мне здесь нужно.

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Как насчет

SELECT STUFF(
(
    SELECT
        ',',
        CAST(rating AS VARCHAR)
    FROM product_reviews
    WHERE product_id = 8995
    FOR XML PATH('')
), 1, 1, '')
1 голос
/ 01 февраля 2012
SELECT SUBSTRING((
  SELECT STUFF(CAST(rating AS VARCHAR),1,0,',')
  FROM product_reviews
  WHERE product_id = 8995
  FOR XML PATH('')
), 2, 999)
...