我有一个名为T726
的表,其中包含类似以下示例的数据(该示例是Select * from T726
的结果):
id | regvalue | timest
-----------------------------------
id16 | 541 | 1510141964
id17 | 80 | 1510141964
id700 | 17012547 | 1510141964
id701 | 306045210 | 1510141964
id16 | 773 | 1510141975
id17 | 90 | 1510141975
id700 | 17012547 | 1510141975
id701 | 306045211 | 1510141975
id16 | 478 | 1510142008
id17 | 23 | 1510142008
id700 | 17012547 | 1510142008
id701 | 306045212 | 1510142008
id16 | 90 | 1510146939
id17 | 11 | 1510146939
id700 | 17013961 | 1510146939
id701 | 306045170 | 1510146939
在我的SQL客户端上(我目前正在使用SQuirreL
),可以选择将结果作为旋转表获取,如下例所示:
timestamp | id16 | id17 | id700 | id701 |
----------------------------------------------------------------
1510141964 | 541 | 80 | 17012547 | 306045210 |
1510141975 | 773 | 90 | 17012547 | 306045211 |
1510142008 | 478 | 23 | 17012547 | 306045212 |
1510146939 | 90 | 11 | 17013961 | 306045170 |
我在网上冲浪,发现有一个名为PIVOT的关系操作。但是,我无法在select语句中使用PIVOT获得该结果。
任何帮助都是apreciated, 提前致谢
答案 0 :(得分:1)
为什么不使用简单的条件聚合而不是PIVOT
运算符
select timest,
max(case when id= 'id16' then regvalue end) [id16],
...
max(case when id= 'id701' then regvalue end) [id701]
from table
group by timest
编辑:pivot
使用动态样式
declare @col varchar(max), @q varchar(max)
set @col = stuff(
(select distinct ','+quotename(id) from #tm for xml path('')),
1,1,'')
set @q = 'select * from table
PIVOT
(
MAX(regvalue) FOR id IN ('+@col+')
)p'
EXEC (@Q)
答案 1 :(得分:1)
使用PIVOT
SELECT
*
FROM YourTable
PIVOT
(
MAX(regvalue)
FOR
Id IN
(
[id16],[id17],[id700],[id701]
)
)P
答案 2 :(得分:0)
请找到解决方案。
数据生成
CREATE TABLE TstPivot ( id VARCHAR(10) ,regvalue BIGINT ,时间BIGINT ) GO
INSERT INTO TstPivot VALUES
('id16' ,541 ,1510141964),
('id17' ,80 ,1510141964),
('id700' ,17012547 ,1510141964),
('id701' ,306045210 ,1510141964),
('id16' ,773 ,1510141975),
('id17' ,90 ,1510141975),
('id700' ,17012547 ,1510141975),
('id701' ,306045211 ,1510141975),
('id16' ,478 ,1510142008),
('id17' ,23 ,1510142008),
('id700' ,17012547 ,1510142008),
('id701' ,306045212 ,1510142008),
('id16' ,90 ,1510146939),
('id17' ,11 ,1510146939),
('id700' ,17013961 ,1510146939),
('id701' ,306045170 ,1510146939)
GO
<强>解强>
SELECT * FROM TstPivot
PIVOT
(
MAX(regvalue) FOR id IN ([id16],[id17],[id700],[id701])
)m
输出
timest id16 id17 id700 id701
-------------------- -------------------- -------------------- -------------------- --------------------
1510141964 541 80 17012547 306045210
1510141975 773 90 17012547 306045211
1510142008 478 23 17012547 306045212
1510146939 90 11 17013961 306045170
(4 rows affected)