将两个 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 个值的行