sql >> データベース >  >> RDS >> Sqlserver

多対多の関係に対するSQL Serverクエリ - クエリの方法は?

    row_number() を適用する以下を使用できます 記録へ:

    select DateTimeID, [1] as Wavelength1, [2] as Wavelength2, SensorIdfrom( select [DateTimeID], [Wavelength], [SensorID], row_number() over(DateTimeID で分割, SensorId は DateTimeID 順) rn from yourtable) srcpivot( max(Wavelength) for rn in ([1], [2])) piv  

    SQL Fiddle with Demo を参照してください。 .

    波長の数が不明な場合 値の場合、動的 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(DateTimeID によるパーティション、DateTimeID による SensorId の順序) 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) DateTimeID による、SensorId による DateTimeID による順序) as varchar(50)) rn from yourtable ) x pivot ( max(Wavelength) for rn in (' + @cols + ') ) p 'execute(@query)  

    デモによる SQL Fiddle を参照してください。




    1. OracleのSINH()関数

    2. count(*)列のmin()を取得する

    3. 2つのOracleインスタンス間にDBリンクを作成する方法

    4. EntityFrameworkでSQLServerシーケンスの次の値を取得するにはどうすればよいですか?