我有一個連接多個記錄的東西函式,我在每第二個記錄后放一個換行符,它在這個查詢中作業正常:
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
但我現在想用另一個列來做這個,我需要 DISTINCT 并且我無法讓它作業,我的查詢是:
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
如果有人可以幫助我,我將不勝感激。
uj5u.com熱心網友回復:
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 modulation
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/381079.html
標籤:sql sql-server 查询语句
