将两个 SQL 查询的结果组合为单独的列

Posted

技术标签:

【中文标题】将两个 SQL 查询的结果组合为单独的列【英文标题】:Combining the results of two SQL queries as separate columns 【发布时间】:2013-05-03 17:03:33 【问题描述】:

我有两个查询返回单独的结果集,并且查询返回正确的输出。

如何将这两个查询合并为一个,以便获得一个结果集,每个结果位于单独的列中?

查询 1:

SELECT SUM(Fdays) AS fDaysSum From tblFieldDays WHERE tblFieldDays.NameCode=35 AND tblFieldDays.WeekEnding=?

查询 2:

SELECT SUM(CHdays) AS hrsSum From tblChargeHours WHERE tblChargeHours.NameCode=35 AND tblChargeHours.WeekEnding=?

谢谢。

【问题讨论】:

SELECT SUM("+Fdays+")AS fDaysSum, SUM("+CHdays+") AS hrsSum? 您想要join or a union?也许您可以展示一些示例数据和所需的输出。 @DavidStarkey 我以同样的方式尝试过,但我不知道如何为不同的数据库提供不同的 where 条件 @TimLehner 我需要联合。我尝试了 Query_1 UNION ALL Query_2 它可以工作,但是结果集给出了 2 行和 1 列,而不是我想要 2 列和 1 行,即 sible rs 中的两个值。 next() 调用。 @user1614217 那么你不需要UNION,你需要CROSS JOIN 【参考方案1】:

您可以为查询设置别名并在选择查询中选择它们http://sqlfiddle.com/#!2/ca27b/1

SELECT x.a, y.b FROM (SELECT * from a) as x, (SELECT * FROM b) as y

【讨论】:

我还有一个问题。考虑到我从第一个查询中获取值作为 X 并且我需要在查询 2 中使用其中一个值如何完成? query2 是否在不同的 php 行?您可以将(SELECT...) as x 放入您的新查询中,并将其用作别名(x.a)中的参数。或者如果它位于 php 的不同行,请考虑存储所需值的结果并在执行时将其用作参数PHP上的sql查询 我也是这么想的,试了一下却报错:参数太少 你能用你当前的查询更新你的问题吗?和错误? 它在同一行。我试图将它用作别名,它给了我错误:参数太少【参考方案2】:

您可以使用CROSS JOIN

SELECT *
FROM (  SELECT SUM(Fdays) AS fDaysSum 
        FROM tblFieldDays 
        WHERE tblFieldDays.NameCode=35 
        AND tblFieldDays.WeekEnding=1) A -- use you real query here
CROSS JOIN (SELECT SUM(CHdays) AS hrsSum 
            FROM tblChargeHours 
            WHERE tblChargeHours.NameCode=35 
            AND tblChargeHours.WeekEnding=1) B -- use you real query here

【讨论】:

起初我想知道这是否是个玩笑,但如果查询总是只返回一行(显然只有聚合)并且 OP 不介意放置这些参数,这是一个解决方案两次。 @TimLehner 这里不是开玩笑。即使我看到派生表返回一行,我也应该澄清一下,因为它可以正常工作 @TimLehner 它给了我错误,说 FROM 子句中的 Synatx 错误这是我的代码:String t1 = "SELECT * "+ "FROM ( SELECT SUM("+Fdays+")AS fDaysSum "+ "FROM tblFieldDays "+ "WHERE tblFieldDays.NameCode=35 AND tblFieldDays.WeekEnding=?) "+ "CROSS JOIN (SELECT SUM("+CHdays+") AS hrsSum "+ " FROM tblChargeHours WHERE tblChargeHours.NameCode=35 AND tblChargeHours.WeekEnding=?)"; @user1614217 可能是第一个查询的别名,我那里没有空格。现在试试我的更新答案 @Lamak 同样的问题,事实上我之前也做了间距的事情【参考方案3】:

如果您希望它们在同一行中,您还可以使用 CTE 获取所需的信息组并将它们连接在一起。示例,取决于您使用的 SQL 语法,此处:

WITH group1 AS (
  SELECT testA
    FROM tableA
),
group2 AS (
  SELECT testB
    FROM tableB 
)
SELECT *
  FROM group1
  JOIN group2 ON group1.testA = group2.testB --your choice of join
;

您可以根据要提取的数据来决定您想要什么样的 JOIN,并确保在您从中获取信息的组中具有相同的字段,以便将它们全部放在一行中。如果您有多个列,请确保正确命名它们,以便您知道哪个是哪个。此外,出于性能考虑,CTE 是要走的路,而不是内联 SELECT 等。希望这可以帮助。

【讨论】:

【参考方案4】:

如何将 4 个查询合并为一个查询

在查询下方显示

    待处理案件总数+本月提交的2个案件(基于sysdate)+案件总数(1+2)+没有。已处置的案件,其中 nse=已处置 + 否。未决案件数(除了 nse 已处理)

nsc = 案例性质

每月 6 日进行报告

(月报将从上月5日开始计算到本月05日)

【讨论】:

以上是关于将两个 SQL 查询的结果组合为单独的列的主要内容,如果未能解决你的问题,请参考以下文章

将两个查询与计数函数组合为一个结果集

SQL:将查询输出更改为具有两个单独的列,而不是具有 2 个值的行

如何将文本和查询结果组合为 PHP 变量的值

SQL Server - 如何将带有组小计的列添加到查询结果中

.如何使用UNION子句,它必须符合哪两条基本准则?

sql中Union和union all的使用