大家好,我一直在努力解决这个问题,现在我已经陷入困境了。希望这个问题对社区有用。
我有一个趋势表,其数据类似于下面的第一个表格。我有另一个表格,如下面的第二个表格。目标是在堆积柱形图中显示数据。图表中的每一列都是当天的最后一个样本,每列的系列组将是电路类别。
每隔10分钟对数据进行一次采样,但例如我每天只输入2个样本:
time_stamp | circuit1 | circuit2 | circuit3
1/5/13 08:00 | 50 | 60 | 30
1/5/13 04:00 | 48 | 55 | 26
1/4/13 08:00 | 42 | 52 | 22
1/4/13 04:00 | 40 | 51 | 20
等
我有一个类似于此的类别表:
Circuit_name | circuit_category
circuit1 | category4
circuit2 | category2
circuit3 | category12
等
也许我并没有考虑从报告的角度来看更简单的方法,但为了像需求一样每天获得堆积条形图,我想我需要一个查询,结果如下:< / p>
time_stamp | Circuit_name | Circuit_category | Value
1/5/13 08:00 | Circuit1 | category4 | 50
1/5/13 08:00 | Circuit2 | category2 | 60
1/5/13 08:00 | Circuit3 | category12 | 30
1/4/13 08:00 | Circuit1 | category4 | 42
1/4/13 08:00 | Circuit2 | category2 | 52
1/4/13 08:00 | Circuit3 | category12 | 22
我认为我需要编写一个查询来抓取按日分组的max(time_stamp)
,但转动结果以便我可以将数据加入类别表。我已经玩过在第一个表上使用pivot,因为我必须将table2中的circuit_name连接到table1中的实际列名,但是我仍然遇到了死胡同,因为我不太了解pivot。
无论如何,如果有必要将电路类别硬编码到查询中,我愿意放弃表2,但这又是我被困的地方。任何指导将不胜感激。
数据位于sql2008r2服务器上。
谢谢!
答案 0 :(得分:0)
这似乎是unpivot
列到行... SQL Server有这个功能:)我相信以下查询可以改进和优化。你试过后请求评论。
查询:
select m.*, t.cat
from
(SELECT ts, name, value
FROM
(
SELECT ts,
CONVERT(varchar(20), C1) AS c1,
CONVERT(varchar(20), C2) AS c2,
CONVERT(varchar(20), C3) AS c3
FROM t2
) MyTable
UNPIVOT
(Value FOR name IN
(c1,c2,c3))AS MyUnPivot) m
left join t1 t
on t.name = m.name
;
结果:
TS NAME VALUE CAT
January, 05 2013 08:00:00+0000 c1 50 category4
January, 05 2013 08:00:00+0000 c2 60 category2
January, 05 2013 08:00:00+0000 c3 30 category12
January, 05 2013 04:00:00+0000 c1 48 category4
January, 05 2013 04:00:00+0000 c2 55 category2
January, 05 2013 04:00:00+0000 c3 26 category12
January, 04 2013 08:00:00+0000 c1 42 category4
January, 04 2013 08:00:00+0000 c2 52 category2
January, 04 2013 08:00:00+0000 c3 22 category12
January, 04 2013 04:00:00+0000 c1 40 category4
January, 04 2013 04:00:00+0000 c2 51 category2
January, 04 2013 04:00:00+0000 c3 20 category12