繁体   English   中英

如何在SQL中联接多个select语句并在不同的列中显示

[英]How to join multiple select statements in SQL and display in different colums

我编写了一个查询,该查询将两个表连接起来,显示总数no. of appointments 使用union关键字no. of appointmentsleads的查询,我希望此查询的结果显示在两个不同的列中,我对此有一个很难理解的描述

SELECT COUNT(FilteredAppointment.createdbyname) AS Appointment
FROM  FilteredBusinessUnit 
INNER JOIN FilteredSystemUser 
    ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid 
INNER JOIN FilteredAppointment 
    ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
UNION
SELECT COUNT(FilteredLead.fullname) AS Lead
FROM  FilteredBusinessUnit 
INNER JOIN FilteredSystemUser 
    ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid 
INNER JOIN FilteredLead 
    ON FilteredSystemUser.systemuserid = FilteredLead.createdby
WHERE (FilteredBusinessUnit.name IN (@Branch))

我想要的结果是:

CRITERIA | Appointment | Leads
Total    | 200         | 123

联盟不是正确的方法。 Union合并或合并为具有相同数量的列和数据类型的结果集。 我会做这样的事情。

SELECT 
    (   SELECT COUNT(FilteredAppointment.createdbyname)
        FROM  FilteredBusinessUnit INNER JOIN
              FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid INNER JOIN
              FilteredAppointment ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
        WHERE (FilteredBusinessUnit.name IN (@Branch))
    ) AS Appointment ,
    (   SELECT COUNT(FilteredLead.fullname)
        FROM  FilteredBusinessUnit INNER JOIN
              FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid INNER JOIN
              FilteredLead ON FilteredSystemUser.systemuserid = FilteredLead.createdby
        WHERE (FilteredBusinessUnit.name IN (@Branch))
    ) AS Lead

为了回应您的评论,以便能够将数字与其他分支进行比较,我会尝试类似的方法。

SELECT  FilteredBusinessUnit.name , 
        SUM(CASE WHEN FilteredAppointment.createdbyname IS NOT NULL THEN 1 ELSE 0 END) AS Appointments,
        SUM(CASE WHEN FilteredAppointment.fullname IS NOT NULL THEN 1 ELSE 0 END) AS Leads
FROM    FilteredBusinessUnit 
        INNER JOIN FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid 
        LEFT OUTER JOIN FilteredAppointment ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
        LEFT OUTER JOIN FilteredLead ON FilteredSystemUser.systemuserid = FilteredLead.createdby
WHERE   (FilteredBusinessUnit.name IN (@Branch1, @Branch2)) 
GROUP BY FilteredBusinessUnit.name

如果要查看所有分支,可以忽略where子句。

通过cross join而不是union执行此操作:

select 'Total', Appointment, Leads
from (SELECT COUNT(FilteredAppointment.createdbyname) AS Appointment
      FROM  FilteredBusinessUnit INNER JOIN
            FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid INNER JOIN
            FilteredAppointment ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
     ) c1 cross join
     (SELECT COUNT(FilteredLead.fullname) AS Leads
      FROM  FilteredBusinessUnit INNER JOIN
            FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid INNER JOIN
            FilteredLead ON FilteredSystemUser.systemuserid = FilteredLead.createdby
      WHERE (FilteredBusinessUnit.name IN (@Branch))
     ) t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM