查询以合并列值

时间:2019-09-27 08:47:59

标签: sql sql-server tsql

需要帮助来形成SQL查询

Get-ADUser ... |
    Select-Object uidNumber, sAMAccountName |
    ForEach-Object { "INSERT INTO `databaseNameHere`.`currentUser` (...);" } |
    Out-File -FilePath C:\Desktop\UIDs\currentList.txt

尝试执行tsql查询以获取以下输出:

INSERT

请不要让我需要最后一行的“目标”列。

2 个答案:

答案 0 :(得分:1)

下面的查询使用row_number()来标识其余的第一行。仅对于第一行,添加Source进行串联

; with cte as
(
    select  ID, [Source], [Destination], 
        r = row_number() over (partition by ID order by [Source])
    from    #TempTable
)
select  ID,
    ( select case when r = 1 then [Source] else '' end 
          + ',' + [Destination] 
      from  cte x 
      where x.ID = t.ID for xml path('')
     ) as CombinedValues
from    cte t
group by ID

答案 1 :(得分:0)

    DECLARE @LastID AS INT
    SELECT @LastID=MAX(ID) FROM #TempTable

    DROP TABLE IF EXISTS #TempTbl2
    SELECT  * INTO #TempTbl2 FROM   
    (
    SELECT * FROM (
    SELECT ID,SOURCE FROM #TempTable WHERE ID<>@LastID
    UNION ALL
    SELECT ID,Destination FROM #TempTable WHERE ID<>@LastID
    ) AS TMP_TBL 
    GROUP BY ID,SOURCE
    ) AS TMP_TBL2

    select ID,
    STRING_AGG( ISNULL(Source, ' '), ',') AS CombinedValues from #TempTbl2 WHERE ID<>@LastID
    GROUP  BY ID 
    UNION ALL
    SELECT TOP 1 ID,source from #TempTable WHERE ID=@LastID 

+----+----------------+
| ID | CombinedValues |
+----+----------------+
|  1 | A,B,C,D        |
|  2 | A              |
+----+----------------+