[英]SQL Server 2017 - Concatenate values based on order number
我正在對分組值大於 1 的值進行連接。這很好用,但現在我試圖弄清楚如何利用序列/順序號來按該順序連接值。 有沒有辦法我可以做到這一點?
例如,我有一個表,其中包含以下內容:
我需要能夠連接 Field1 和 Field4,因為 StagingCol 是相同的名稱,並且我還需要能夠按照 ConcatenateOrder 列中提供的順序進行連接。 我不能讓它亂序,即 Field4 + Field1
這是我到目前為止工作正常的代碼片段,它連接了兩個 LandingZoneCol 值......
--DECLARATION OF LANDING ZONE FIELD NAMES CONCATENATED TOGETHER AND DELMITED BY A COMMA WHERE VALUE NEEDS TO BE CONCATENATED (I.E. SUBSCRIBER + SEQ# = MEMBER_ID)
SELECT @ConcatLandingZoneFieldNames = ISNULL(@ConcatLandingZoneFieldNames,'') + ISNULL(LandZoneMapping.LandingZoneFieldName,'') + ', '
FROM @LandingZoneMapping AS LandZoneMapping
WHERE LandZoneMapping.StagingColumnName <> 'BreadCrumb'
AND LandZoneMapping.StagingColumnName IN (SELECT StagingColumnName
FROM @TEST
WHERE Total > 1)
--DECLARATION OF VARIABLES
SET @ConcatLandingZoneFieldNames = CONCAT('CONCAT(',SUBSTRING(@ConcatLandingZoneFieldNames,1,LEN(@ConcatLandingZoneFieldNames)-1),')')
當前結果CONCAT(Field1, Field4)
預期結果CONCAT(Field1, Field4)
盡管當前和預期現在都相同,但我想確保值的串聯以正確的順序串聯。 如果我要翻轉上表中的 ConcatenateOrder 數字,那么結果會有所不同。 “當前”結果最終將是 CONCAT(Field1, Field4) 但“預期結果”應該是 CONCAT(Field4, Field1)
任何幫助將不勝感激。
您的代碼看起來像 SQL 服務器。 你使用string_agg()
:
select string_agg(lzm.landingzonecol, ',') within group (order by lzm.concatenateorder)
from @LandingZoneMapping lzm
where lzm.stagingcol = 'ID';
您可以使用order by
子句控制排序。
正如 Gordon 所提到的,如果您使用的是 SQL 服務器版本 2017 或更高版本,則可以使用string_agg
( Doc ) function。
如果您需要 SQL 服務器版本低於 2017 的相同功能,請使用以下命令:
SELECT STUFF((
SELECT CONCAT (
','
,LandingZoneCol
)
FROM @LandingZoneMapping LZM
WHERE StagingCol = 'ID'
ORDER BY ConcatenateOrder
FOR XML PATH('')
), 1, 1, '') AS Result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.