0

嗨,伙计们,我一直在思考如何处理这个问题已经有一段时间了,我只是被困住了。希望这个问题对社区有用。

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

数据每 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

等等

从报告的角度来看,也许我没有想到一种更简单的方法来做到这一点,但是为了每天得到一个像要求一样的堆积条形图,我想我需要一个查询,结果如下:

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)按天分组的数据,但要对结果进行透视,以便我可以将数据加入到类别表中。因为我必须将 table2 中的 circuit_name 连接到 table1 中的实际列名,所以我一直在尝试在第一张表上使用 pivot ,但是我一直遇到死胡同,因为我对 pivot 的理解不够好。

无论如何,如果有必要将电路类别硬编码到查询中,我愿意放弃表 2,但这又是我卡住的地方。任何指导将不胜感激。

数据在 sql2008r2 服务器上。

谢谢!

4

1 回答 1

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
于 2013-01-09T11:11:25.123 回答