LibreOffice Base - SQL 查询困难

LibreOffice Base - Difficulties with SQL query

我有一个包含 3 列的 table,例如 FoodTypeTaste

我试图得到(到目前为止运气不好)一个 SQL 语句,它会产生一个 table 像:

            Bad       Good    Delicious   Total
Fruit        05         09           16      20
Vegetables   12         20           03      35
Total        17         29           19      55

如果输出 table 上的数字是每个 Type / Taste 组合的 table 中有多少 Food 的计数。

如何实现?

前两行可以在一个带有子查询子句的查询中完成:

SELECT X."Type", 
       SUM(X."Bad") AS "Bad",
       SUM(X."Good") AS "Good",
       SUM(X."Delicious") AS "Delicious",
       SUM(X."Total") AS "Total" 
FROM (SELECT "Type",
          CASEWHEN("Taste" = 'Bad',1,0) AS "Bad",
          CASEWHEN("Taste" = 'Good',1,0) AS "Good",
          CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious",
          1 AS "Total" FROM "YourTableName") X 
GROUP BY "Type"

子查询创建列 "Bad"、"Good" 和 "Delicious",每列中有 1 或 0,然后查询的外部将所有值相加。

要获得底部的总计行,您必须使用 UNION ALL,这是基本解析器不支持的。要使此查询正常工作,您需要打开 EditRun SQL Directly 选项。 (这将禁用某些需要解析器的表单和报告功能 - 这可能对您的使用无关紧要,但仅供参考,如果您稍后在表单或报告中使用此查询。)

您将 UNION ALL 使用的查询基本上是相同的查询,只是不按类型分组。所以总计:

SELECT X."Type", 
       SUM(X."Bad") AS "Bad",
       SUM(X."Good") AS "Good",
       SUM(X."Delicious") AS "Delicious",
       SUM(X."Total") AS "Total" 
FROM (SELECT "Type",
          CASEWHEN("Taste" = 'Bad',1,0) AS "Bad",
          CASEWHEN("Taste" = 'Good',1,0) AS "Good",
          CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious",
          1 AS "Total" FROM "YourTableName") X 
GROUP BY "Type"

UNION ALL

SELECT 'Total' AS "BottomTotal",
       SUM(Y."Bad"),
       SUM(Y."Good"),
       SUM(Y."Delicious"),
       SUM(Y."Total") 
FROM (SELECT CASEWHEN("Taste" = 'Bad',1,0) AS "Bad",
          CASEWHEN("Taste" = 'Good',1,0) AS "Good",
          CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious",
          1 AS "Total" FROM "YourTableName") Y 
GROUP BY "BottomTotal"

确保始终将 "YourTableName" 替换为您的实际 table 姓名。