将类别添加到趋势表

时间:2013-01-09 08:48:56

标签: sql report trending

大家好,我一直在努力解决这个问题,现在我已经陷入困境了。希望这个问题对社区有用。

我有一个趋势表,其数据类似于下面的第一个表格。我有另一个表格,如下面的第二个表格。目标是在堆积柱形图中显示数据。图表中的每一列都是当天的最后一个样本,每列的系列组将是电路类别。

每隔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服务器上。

谢谢!

1 个答案:

答案 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