如何使用不同的表和不同的列名连接多个查询

Posted

技术标签:

【中文标题】如何使用不同的表和不同的列名连接多个查询【英文标题】:How to join multiple queries with different tables and different column name 【发布时间】:2016-01-02 21:53:30 【问题描述】:

我想加入具有不同表和列名的多个查询,同时我需要显示重复字段的计数,如下所示。

查询是:(Proj_uid 在我需要匹配的所有表中都很常见)

select proj_name,Agency,District,Division,Proj_status from tempproj

需要加入 2 个表来获得结果是 payment80 和 payment20,其中包含具有重复值的 billtype 列,我也想计算这些值

SELECT      p.Proj_name,p.billtype, COUNT(1) as CNT
FROM        payment80 p where billtype='civil'
GROUP BY Proj_name, billtype 

(这是通过使用单个表,但我希望通过加入 payment80 和 payment20 表来获得这个结果)

SELECT      p.Proj_name,p.billtype, COUNT(1) as CNT
FROM        payment80 p where billtype='Electric'
GROUP BY Proj_name, billtype 

(我要统计的 billtype 值,只显示多条重复记录)

Proj_Name      billtype
------------------------
policegruha     civil
gruhayojna      Electric
policegruha     civil
dcoffice        civil
spoffice        Electric
dcoffice        civil

3) 从支付中选择 billtype,这里我还需要计算重复值并显示在 billtype 中

重复值将出现在 billtype 中,其中包含以下内容:

最后我想要这样的输出:

Proj_name      Agency District     Division  Projstatus Civilbilltype Electricbilltype
policegruha    kumar  chitradurga  davangere ongoing                3                1
gruhayojna     khan   ballary      ballary   completed              2                2
Atered         john   bangalore    bangalore ongoing                2                4
dcoffice       ravi   mangalore    mangalore ongoing                1                2
spoffice       mary   chitradurga  davangere completed              3                4
hostel         jack   ballary      ballary   completed              3                3
univercity     kumar  bangalore    bangalore ongoing                4                2
mess           Raj    mysore       mysore    ongoing                2                1
policestation  khan   mysore       mysore    ongoing                1                4
conferencehall Rosy   davangere davangere    ongoing                2                2

【问题讨论】:

请为所有需要连接的表发布您的表结构 你的意思是把同一张图片链接两次吗? 直到 projstatus 它来自 tempproj 表,之后该 billtype 列 im 从表 payment80 和 payment20 加入,结果只有一个包含民用、电费的账单类型。对于每个 proj_name,我有一个以上的 billtype 值,对于 proj_name:policegruha 有 3 个 Civil 和 1 个 Electric,我需要在 billtype 中计数和显示,对于 Civil 的 billtype 作为 Civilbilltype,在这里我只需要显示计数不indivisually Civil,Civil,Civil 3 次,只有 3 我需要显示这适用于 Civilbilltype 和 Electricbilltype 【参考方案1】:

您正在加入三个单独的表。一个是物理的,tempproj,另外两个是虚拟的:它们是聚合。

这就是技术。

SELECT p.proj_name,p.Agency,p.District,p.Division,p.Proj_status,
       Civilbills.billcount as Civilbills, 
       Electribills.billcount as Electricbills
  FROM tempproj p
  LEFT JOIN (
             SELECT Proj_name, COUNT(*) as billcount
               FROM payment80
              where billtype='civil'
              GROUP BY Proj_name
            ) Civilbills ON Civilbills.Proj_name = p.proj_name 
  LEFT JOIN (
             SELECT Proj_name, COUNT(*) as billcount
               FROM payment80
              where billtype='Electric'
              GROUP BY Proj_name
            ) Electricbills ON Electricbills.Proj_name = p.proj_name 

您的要求包括来自payment80 表的两个单独的聚合。 LEFT JOINs 可防止抑制缺少任一类别账单的项目行。

【讨论】:

非常感谢@Ollie,但我收到一个错误,因为对象名称无效 'tempproj' 非常感谢先生,现在它工作正常,一些列名的问题就是这样。谢谢分配先生

以上是关于如何使用不同的表和不同的列名连接多个查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中连接多个表和 GROUP BY

在所有表中搜索多个值

如何对不同表和不同过滤器的多个计数求和

组合和连接两个不同编号的表。列和相同的列名

如何从不同的表中获取最大版本并加入表?

如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER