Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявка на SQL Server за много към много връзка - как да правя заявка?

Можете да използвате следното, което прилага row_number() към записите:

select DateTimeID,
  [1] as Wavelength1, 
  [2] as Wavelength2,
  SensorId
from
(
  select [DateTimeID], [Wavelength], [SensorID],
    row_number() over(partition by DateTimeID, SensorId
                      order by DateTimeID) rn
  from yourtable
) src
pivot
(
  max(Wavelength)
  for rn in ([1], [2])
) piv

Вижте SQL Fiddle с демонстрация .

Ако ще имате неизвестен брой wavelength стойности, тогава можете да използвате динамичен SQL, за да генерирате това:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Wavelength'+cast(rn as varchar(50))) 
                    from
                    (
                      select row_number() over(partition by DateTimeID, SensorId
                                              order by DateTimeID) rn
                      from yourtable
                    ) src
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT DateTimeID,' + @cols + ', SensorId  from 
             (
                select [DateTimeID], [Wavelength], [SensorID],
                  ''Wavelength''+cast(row_number() over(partition by DateTimeID, SensorId
                                        order by DateTimeID) as varchar(50)) rn
                from yourtable
            ) x
            pivot 
            (
                max(Wavelength)
                for rn in (' + @cols + ')
            ) p '

execute(@query)

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server UNION - Какво е поведението по подразбиране ORDER BY

  2. Обектът 'DF__*' зависи от колона '*' - Промяна на int на double

  3. Типове курсори на SQL Server - динамичен курсор | Урок за SQL Server / Урок за TSQL

  4. Индексите на SQL Server - нарастващи или низходящи, каква разлика има?

  5. SQL картографира влизане към съществуващ потребител