如何使用不同的表和不同的列名连接多个查询
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 JOIN
s 可防止抑制缺少任一类别账单的项目行。
【讨论】:
非常感谢@Ollie,但我收到一个错误,因为对象名称无效 'tempproj' 非常感谢先生,现在它工作正常,一些列名的问题就是这样。谢谢分配先生以上是关于如何使用不同的表和不同的列名连接多个查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER