我有一个stuff函数,它连接多个记录,并且在每秒钟记录之后放一个中断行,它在这个查询中工作得很好:
STUFF((
SELECT CASE WHEN ROW_NUMBER() OVER (order by new_name) % 2 = 1 THEN CHAR(10) ELSE ',' END + new_name
FROM new_subcatagories
FOR XML PATH('')), 1, 1, '')结果是
Auditory,Kinesthetic vestibular
Multitasking,Planning & organization
Proprioception,Tactile
Vestibular tactile,Visual 但是,现在我想用另一篇我需要区分的专栏来实现它,但我无法让它工作,我的查询是:
STUFF((
SELECT distinct (CASE WHEN ROW_NUMBER() OVER (order by new_maincatgoriesname) % 2 = 1 THEN CHAR(10) ELSE ',' END
+ new_maincatgoriesname)
FOR XML PATH('')), 1, 1, '')我得到的结果是多种非预期的方式,例如
Executive Function
Sensory Discrimination
Sensory modulation ,Multitasking,Sensory Discrimination,Sensory modulation或者其他意想不到的方式,我希望结果是
Executive Function,Sensory Discrimination
Sensory modulation,Multitasking如果有人能帮我,我们会很感激的。
发布于 2021-12-14 07:10:40
DISTINCT适用于整个行,因此使用不需要的数据(如ROW_NUMBER())填充额外的列会产生无效的结果。
要修复它,您需要添加另一个查询嵌套级别。
DECLARE @Blah TABLE( new_maincatgoriesname VARCHAR( 200 ))
INSERT INTO @Blah
VALUES( 'Executive Function' ), ( 'Sensory Discrimination' ), ( 'Multitasking' ),
( 'Sensory Discrimination' ), ( 'Executive Function' ), ( 'Sensory modulation' )
SELECT
STUFF( CAST((
-- Step 2: manipulate result of Step 1
SELECT (CASE WHEN ROW_NUMBER() OVER (order by new_maincatgoriesname) % 2 = 1 THEN CHAR(10) ELSE ',' END + new_maincatgoriesname )
FROM
-- Step 1: Get distinct values
( SELECT DISTINCT new_maincatgoriesname
FROM @Blah ) AS MainQuery
FOR XML PATH('') ) AS VARCHAR( 2000 )), 1, 1, '' )输出:
Executive Function,Multitasking
Sensory Discrimination,Sensory modulationhttps://stackoverflow.com/questions/70343129
复制相似问题