簡體   English   中英

SQL 服務器 2017 - 根據訂單號連接值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM