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

时间:2016-01-02 21:53:30

标签: mysql sql

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

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

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

需要加入2个表来获得pay80的结果,而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中,其中包含以下内容:

This image displays the data for third query

最后我想要一个像这样的输出:

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

1 个答案:

答案 0 :(得分:0)

您正在加入三个单独的表格。一个是物理的,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 JOIN阻止了对缺少任何类别账单的项目行的压制。