好的。假設我有臨時表所代表的數據。SQL Pivot將行轉換爲列
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實際上是不同的。我的問題是如何結束這個查詢給出兩行的結果。 1與id'1gk'的數據和另一個與'2gk'的數據at和平均或最小(哪一個更容易)時間戳每個ID的數據。
IE 1gk將具有以下數據
值( '1gk', '2012-01-01 00:00:00.000', 'TI | A', '鮑勃', 'TK1',1000.00 )
值( '1gk', '2012-01-01 00:00:00.000', 'TI | B', '鮑勃', 'TK1',500.00)
值( '1gk', '2012-01-01 00:00:00.000','TI | C','bob','TK1',800.00)
values('1gk','2012-01-01 00:00:00.000 ','TI | E','bob','TK1',1100.00)
個值( '1gk', '2012-01-01 00:00:00.000', 'TI | F', '鮑勃', 'TK1',1100.00)
是什麼讓那些相關的兩個記錄?什麼是確切的確定性規則?我們是否可以放棄'DateTransmited'的時間部分? – peterm
這兩個記錄在這種情況下'1gk'與記錄組的唯一標識符相關。 IE沒有其他數據會有ID'1gk'。傳輸日期的時間部分不能簡單地如上所述,我希望得到的最小DateTransmitted爲組是DateTransmitted。 – BLITZCLIPSE
你正在使用什麼數據庫系統? –