Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie programu SQL Server dla relacji „wiele do wielu” — jak wykonać zapytanie?

Możesz użyć poniższego, które zastosuje row_number() do ewidencji:

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

Zobacz SQL Fiddle z wersją demonstracyjną .

Jeśli będziesz mieć nieznaną liczbę wavelength wartości, możesz użyć dynamicznego SQL, aby to wygenerować:

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)

Zobacz Skrzypce SQL z wersją demonstracyjną




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać operatora logicznego EXISTS w SQL Server — samouczek SQL Server / TSQL — część 125

  2. ClassNotFoundException — com.microsoft.jdbc.sqlserver.SQLServerDriver

  3. Jak utworzyć wyzwalacz, który zapisałby usunięte dane (wiele rekordów) w tabeli produkcyjnej?

  4. Zwróć wszystkie nieobliczone kolumny z tabeli w SQL Server

  5. Zaleta błędu odmowy dostępu do serwera połączonego SQL 2008