Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 同时使用子字符串和填充_Sql Server_Substring_Rows - Fatal编程技术网

Sql server 同时使用子字符串和填充

Sql server 同时使用子字符串和填充,sql-server,substring,rows,Sql Server,Substring,Rows,使用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

使用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列中使用了其他名称,但有相同的错误

我知道我可以创建一个过程来实现这一点,但这不是我需要的

谢谢你的帮助

谢谢

怎么样

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

这会产生与以前相同的错误:Msg 8155,级别16,状态2,第8行没有为't'的第1列指定列名。Msg 207,级别16,状态1,第1行无效列名'str',现在可以使用-干杯。不过我更喜欢前面的解决方案,因为它不依赖于少于999个字符的结果。然而,当演员被移除时,你的工作正常。另外,从两者的执行计划来看,它们的速度完全相同(至少在这个小测试中)