我正在LibreOffice库中处理一个数据库,并试图输出相当于一个枢轴表的数据。Base使用的是HSQL,据我所知,它不支持支点,但是您可以用它编写的报告非常适合我,所以我想继续使用它。
我想在我的支点中包含三个列:Rotation、Modality和Number。
下面是数据目前的一个例子:
Rotation | Modality | Number
1 | 1 | 5
1 | 2 | 3
1 | 3 | 4
2 | 1 | 6
2 | 1 | 5
2 | 3 | 2
3 | 1 | 1
3 | 2 | 4正如你所看到的,有三种模式。您可以有任意数量的模式-零或更多的每轮。
我想要的是(每次旋转的每个模态之和):
Rotation | Modality 1 | Modality 2 | Modality 3
1 | 5 | 3 | 4
2 | 11 | 0 | 2
3 | 1 | 4 | 0(与Modality和Rotation的情况相反,我也会同样高兴。)我已经搜索了很多,并想出了两种方法,我认为我应该能够做到这一点:使用CASE WHEN和使用子查询。
CASE WHEN 尝试
以下是我尝试过的:
SELECT "Rotation"
,CASE "Modality" WHEN 1 THEN SUM( "Number" ) END
,CASE "Modality" WHEN 2 THEN SUM( "Number" ) END
,CASE "Modality" WHEN 3 THEN SUM( "Number" ) END
FROM "my database"
GROUP BY "Rotation"
ORDER BY "Rotation" 该查询返回一个表,该表看起来与上面的表类似,除了显示每个模式的和外,它在一个(似乎)随机列中显示了该旋转中所有模式的和,如下所示:
Rotation | Modality 1 | Modality 2 | Modality 3
1 | | | 12
2 | | | 13
3 | 5 | | 所以查询的SUM()组件有问题,我只是不知道是什么。
尝试子查询
SELECT "Modality"
,( SELECT SUM( "Number" ) FROM "my database" WHERE "Rotation" = 1 AND "Modality" = 1 )
,( SELECT SUM( "Number" ) FROM "my database" WHERE "Rotation" = 2 AND "Modality" = 1 )
,( SELECT SUM( "Number" ) FROM "my database" WHERE "Rotation" = 3 AND "Modality" = 1 )
FROM "my database"
WHERE "Modality" = 1
GROUP BY "Modality"产生:
Modality | Rotation 1 | Rotation 2 | Rotation 3
1 | 5 | 11 | 1显然,由于“WHERE”子句,它只返回模态1,但我不知道如何让所有模式显示这个子查询方式。子查询代码的运行速度也比CASE WHEN慢得多,这让我怀疑这样做是否是错误的。
发布于 2015-05-09 19:33:09
查询已关闭,只需将case语句放入sum statement中以执行conditional aggregation
SELECT Rotation
, SUM(CASE WHEN Modality = 1 THEN Number END )
, SUM(CASE WHEN Modality = 2 THEN Number END )
, SUM(CASE WHEN Modality = 3 THEN Number END )
FROM yourtable
GROUP BY Rotation
ORDER BY Rotation https://stackoverflow.com/questions/30144157
复制相似问题