sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Hvordan kan jeg gruppere flere rækkeværdier i separate kolonner?

Her er en dynamisk pivotmåde:

declare @table table (Email varchar(64), Phone varchar(16), ID varchar(3))
insert into @table
values

('[email protected]','555-5555','001'),
('[email protected]','555-5556','001'),
('[email protected]','555-5557','001'),
('[email protected]','555-5558','001'),
('[email protected]','333-5556','002'),
('[email protected]','444-5556','002'),
('[email protected]','777-5556','002')


select
    Email
    ,Phone
    ,ID
    ,row_number() over (partition by ID order by Phone) as RN
into #staging
from 
    @table




DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
       + QUOTENAME(RN)
FROM (SELECT DISTINCT RN FROM #staging) AS RN

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
  N'SELECT Email, ID, ' + @ColumnName + '
    FROM #staging
    PIVOT(MAX(Phone) 
          FOR RN IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery

drop table #staging

Hvis du kun forventer 3, som du sagde, kan du springe dynamikken over...

declare @table table (Email varchar(64), Phone varchar(16), ID varchar(3))
insert into @table
values

('[email protected]','555-5555','001'),
('[email protected]','555-5556','001'),
('[email protected]','333-5556','002'),
('[email protected]','444-5556','002'),
('[email protected]','777-5556','002')

;with cte as(
select
    Email
    ,Phone
    ,ID
    ,row_number() over (partition by ID order by Phone) as RN
from 
    @table)

select
    Email
    ,max(case when RN = 1 then Phone end) as Phone1
    ,max(case when RN = 2 then Phone end) as Phone2
    ,max(case when RN = 3 then Phone end) as Phone3
    ,ID
from
    cte
group by
    Email
    ,ID



  1. Kan jeg skrive PostgreSQL-funktioner på Ruby on Rails?

  2. Sådan konverteres SQL Query-resultat til PANDAS Data Structure?

  3. Har du en Oracle-tabel navngivet som reserveret ord, hvilke problemer kan der opstå?

  4. Hvordan tildeler man flere id'er til en række i MySQL?