2

我试图将结果分成不同的列,我已经搜索了几天,但找不到我想做的正确术语。我可能使用了错误的关键词。

我有一张这样的桌子:

Timestamp    System    Value
1             1          13
1             2          12
1             3          5
2             1          37
2             2          12
2             3          55
3             1          12
3             2          45
3             3          45

我想得到这样的结果:

Timestamp, System1val, System2val, System3val
1             13            12        5
2             37            12        55
3             12            45        45

我很确定有可能做到这一点。我一直在使用:

SELECT  
    FROM_UNIXTIME(timestamp) as time,  
    CASE System
        WHEN '1' THEN System
        END AS System1val,
    CASE System
        WHEN '2' THEN pyr.measure_conv
        END AS System2val,
    CASE System
        WHEN '3' THEN pyr.measure_conv
        END AS System3val
FROM 

这实际上返回不同的字段并填写 NULL 值。最终目标是按时间戳分组并具有所有三个值

4

2 回答 2

4

这是一个“交叉表”挑战。你需要以这种方式构造东西......

SELECT
Timestamp,
SUM(CASE WHEN System=X THEN Value ELSE 0 END) AS X,
SUM(CASE WHEN System=Y THEN Value ELSE 0 END) AS Y
FROM System
GROUP BY Timestamp
于 2013-06-05T08:39:55.373 回答
2

尝试

SELECT  
    timestamp time,  
    SUM(CASE WHEN system = 1 THEN value ELSE NULL END) System1val,
    SUM(CASE WHEN system = 2 THEN value ELSE NULL END) System2val,
    SUM(CASE WHEN system = 3 THEN value ELSE NULL END) System3val
FROM Table1
 GROUP BY timestamp

输出:

| TIME | SYSTEM1VAL | SYSTEM2VAL | SYSTEM3VAL |
-----------------------------------------------
|    1 |         13 |         12 |          5 |
|    2 |         37 |         12 |         55 |
|    3 |         12 |         45 |         45 |

这是SQLFiddle演示

于 2013-06-05T08:46:17.133 回答