Sql server 同时使用子字符串和填充
使用SQL Server 10.0和10.5 我试图将多行提取到一行中,并在SELECT语句中用逗号分隔它们 如果我这样做: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
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个字符的结果。然而,当演员被移除时,你的工作正常。另外,从两者的执行计划来看,它们的速度完全相同(至少在这个小测试中)