【问题标题】:Two queries work separately. Errors when combined. How do I combine two SELECT statements in Libreoffice Base?两个查询分开工作。组合时出错。如何在 Libreoffice Base 中组合两个 SELECT 语句?
【发布时间】:2022-10-12 23:49:47
【问题描述】:

我已经使用电子表格达到了以该格式保存数据不再可行的地步。我已经在 Libreoffice Base 中创建了一个包含相关信息的表格,并且我正在尝试将一些查询放在一起。不幸的是,到目前为止,我尝试创建 SQL 查询时遇到了语法错误。可以预料,考虑到这对我来说都是新的。

这是我的示例表:

TINYINT-A TINYINT-B NUMERIC-A NUMERIC-B BOOLEAN-A BOOLEAN-B
1 2 100 200 1 0
9 8 900 800 0 1

我有以下查询运行良好:

SELECT 
  SUM("TINYINT-A") AS "First Column", 
  SUM("TINYINT-B") AS "Second Column", 
  SUM("NUMERIC-A") AS "Third Column", 
  SUM("NUMERIC-B") AS "Fourth Column"
FROM 
  "Table-A"

输出将是:

First Column Second Column Third Column Fourth Column
10 10 1000 1000

我想添加第五列,当布尔值等于 1 或 0 时,它总结了前四列之一中的行。作为单独的查询,我可以这样做:

SELECT 
  SUM("NUMERIC-A") AS "BOOLEAN-A-NUMERIC-A", 
  SUM("NUMERIC-B") AS "BOOLEAN-A-NUMERIC-B"
FROM 
  "Table-A" 
WHERE 
  "BOOLEAN-A" = 1

预期输出:

BOOLEAN-A-NUMERIC-A BOOLEAN-A-NUMERIC-B
100 200

但是,如果我尝试将两者放在一个查询中,以便将上面的输出附加到第一个输出的末尾,则会出现语法错误。这是我将两者结合起来的尝试:

SELECT 
  (
    SELECT 
      SUM("TINYINT-A") AS "First Column", 
      SUM("TINYINT-B") AS "Second Column", 
      SUM("NUMERIC-A") AS "Third Column", 
      SUM("NUMERIC-B") AS "Fourth Column"
    FROM 
      "Table-A"
  ), 
  (
    SELECT 
      SUM("NUMERIC-A") AS "BOOLEAN-A-NUMERIC-A", 
      SUM("NUMERIC-B") AS "BOOLEAN-A-NUMERIC-B"
    FROM 
      "Table-A" 
    WHERE 
      "BOOLEAN-A" = 1
  ) 
FROM 
  "Table-A"

我忘记了我试图从中得出上述结构的哪个 SO 问题,但它显然不起作用,所以要么我没有正确理解它,要么我在某处遗漏了一个字符。

我还尝试完全按原样处理这两个单独的查询,并在它们之间添加一个新行,仅使用UNION。这会导致错误指出给定命令不是 SELECT 语句。我猜是因为这两个语句没有相同的输出结构。

我什至不确定 Base 中的命令是否相同,以及其他数据库(如 MySQL)之间的差异是否足够大。我确定他们是,而且我可能只是在做一些类似于尝试使用 HTML 标签/语法或其他东西执行 Python 的事情。

【问题讨论】:

  • LO Base 只是前端,不是引擎。例如,您使用的是 PostgreSQL,还是嵌入了 Firebird 或 HSQLDB 1.8 的嵌入式设置?
  • 我懂了。它确实在屏幕底部显示HSQLDB Embedded

标签: hsqldb libreoffice-base


【解决方案1】:

我不知道 libreoffice 和使用 Postgres,但也许它的工作方式相同,您可以了解它。

鉴于:

CREATE TABLE Table_A (
TINYINT_A SMALLINT,
TINYINT_B SMALLINT,
NUMERIC_A NUMERIC,
NUMERIC_B NUMERIC,
BOOLEAN_A BOOLEAN,
BOOLEAN_B BOOLEAN
);

INSERT INTO Table_A (
    TINYINT_A,
    TINYINT_B,
    NUMERIC_A,
    NUMERIC_B,
    BOOLEAN_A,
    BOOLEAN_B
)
VALUES
    (1,2,100,200,true,false),
    (9,8,900,800,false,true);

在 postgres 中,它适用于这样的子查询,尽管我敢肯定,有更好的解决方案:

SELECT 
    SUM(TINYINT_A) AS "First Column", 
    SUM(TINYINT_B) AS "Second Column", 
    SUM(NUMERIC_A) AS "Third Column", 
    SUM(NUMERIC_B) AS "Fourth Column",
    (SELECT SUM(NUMERIC_A) FROM Table_A WHERE BOOLEAN_A is true) AS BOOLEAN_A_NUMERIC_A,
    (SELECT SUM(NUMERIC_B) FROM Table_A WHERE BOOLEAN_A is true) AS BOOLEAN_A_NUMERIC_B
FROM Table_A

【讨论】:

  • 我认为这解决了它。我应该能够使其适应我实际数据库中的所有其他内容。谢谢你。
  • 很高兴听到它有帮助。祝你好运。
猜你喜欢
  • 2017-07-14
  • 1970-01-01
  • 2013-05-31
  • 2011-07-14
  • 2013-08-14
  • 2011-06-06
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多