Ok。一時テーブルで表されるデータがあるとします。
create table temp
(
ID varchar(max),
DateTransmitted datetime,
tagname varchar(max),
Operator varchar(max),
Tanknumber varchar(max),
value float
)
insert into temp values ( '1gk','2012-01-01 00:00:00.000','TI|A','bob','TK1', 1000.00)
insert into temp values ('1gk', '2012-01-01 00:00:00.000','TI|B','bob','TK1', 500.00)
insert into temp values ( '1gk','2012-01-01 00:00:00.000','TI|C','bob','TK1', 800.00)
insert into temp values ( '2gk','2012-01-01 00:00:00.000','TI|D','bob','TK1', 700.00)
insert into temp values ( '1gk','2012-01-01 00:00:02.000','TI|E','bob','TK1', 1100.00)
insert into temp values ( '1gk','2012-01-01 00:00:01.000','TI|F','bob','TK1', 1100.00)
次の動的SQLでデータを変換できます。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.tagname)
FROM temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT
operator, DateTransmitted, tanknumber,' + @cols + ' from
(
select ID
,DateTransmitted
,operator
,Tanknumber
, value
, tagname
from temp
) x
pivot
(
max(value)
for tagname in (' + @cols + ')
) p '
execute(@query)
drop table temp
問題は、一時テーブルへの最後の 2 つのエントリにあります。日付が異なります。データは関連しており、実際にはデータのグループごとに ID が異なるため、同じ行に表示する必要があります。私の質問は、どうすればこのクエリの結果が 2 行になるのかということです。1 つは ID '1gk' のデータで、もう 1 つは '2gk' のデータで、各 ID のデータの平均または最小 (どちらか簡単な方) のタイムスタンプです。
IE 1gk には次のデータがあります
値 ('1gk','2012-01-01 00:00:00.000','TI|A','bob','TK1', 1000.00)
値 ('1gk', '2012-01-01 00:00:00.000','TI|B','bob','TK1', 500.00)
値 (「1gk」、「2012-01-01 00:00:00.000」、「TI|C」、「ボブ」、「TK1」、800.00)
値 (「1gk」、「2012-01-01 00:00:00.000」、「TI|E」、「ボブ」、「TK1」、1100.00)
値 ('1gk','2012-01-01 00:00:00.000','TI|F','bob','TK1', 1100.00)