加入两个查询,这些查询由相同表中的同一列分组,但要加入的参数不同

蒂鲁帕蒂007

我有 3 个表,其中包含物品、所有者和状态,我需要显示作为参数传递的年份中由每个所有者分组的已售/丢弃物品计数。

我可以将所有者名称和已售数量作为一个查询,将所有者名称和丢弃计数作为第二个查询,但是有没有一种方法可以将所有者名称、已销售计数和丢弃计数置于一个查询中?

declare @QueryYear integer = 2020
    --SOLD
    select O1.pk_owner_id,count(P1.pk_Property_ID) as [SaleCount]
    from
        Item P1, Owner O1, Status S1
    WHERE    
        (C1.fkl_owner_ID = O1.pk_owner_ID and C1.fkl_item_ID=P1.pk_item_ID and O1.isactive=1 and year(P1.dtList_Date)=@QueryYear and P1.fkl_status_ID=1)
    group by 
        O1.pk_owner_id

    --DISCARD
    select O2.pk_owner_id,count(P2.pk_item_ID) as [DiscardCount]
    from
        item P2, owner O2, status C2
    WHERE    
        (C2.fkl_Owner_ID = O2.pk_owner_ID and C2.fkl_item_ID=P2.pk_item_ID and O2.isactive=1 and year(P2.dtList_Date)=@QueryYear and P2.fkl_item_status_ID=2)
    group by 
        O2.pk_owner_id

我使用了一个联盟,它只在 2 列中给出了答案。

普威尔考克斯

将状态过滤器移至 select 子句中的 case 语句。

select      o.pk_owner_id,
            SaleCount = count(case when i.fkl_status_ID = 1 then 1 end),
            DiscardCount = count(case when i.fkl_item_status_ID = 2 then 1 end)
from        Status s 
join        Item i on s.fkl_item_ID = i.pk_item_ID
join        Owner o on s.fkl_owner_ID = o.pk_owner_ID                   
where       o.isactive = 1 
and         year(i.dtList_Date) = @QueryYear 
group by    o.pk_owner_id

另外,使用关系运算符来表达表之间的关系,不要使用where子句。在这种情况下,因为关系的性质是“水平的”,因为一个表中的每一行都与另一个表中的每一行相匹配,所以您正在寻找一个 (inner) join

最后,如果您的状态类型比 '1' 和 '2' 多,那么您可以在statuswith的连接中添加另一个条件item,或将其放入您的where语句中。也就是说,您可以执行以下操作:

and i.fkl_status_ID in (1,2)

但是我注意到 status_id 列对于 SaleCount 和 DiscardCount 有不同的名称。所以如果这不是错误,你需要做一个带括号的or版本。但主要的一点是,如果处理器知道忽略不是“1”或“2”的状态,您的查询将更有效率。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

加入MySQL中两个选择查询

MySQL的加入查询:两个主要的和一个链接表

加入类似列,但不同值的两个表

如何从同一张表中查询同一列但条件不同的两个不同的总和?

我需要帮助加入两个查询才能得到一张表

如何加入两个比较不同结果的查询?

在同一列中查询3个不同的值

如何从表中的同一列“计数”两个不同的条件?

尝试从已加入的2个子查询中获取一列,并且分组不起作用

如何加入两个查询

SQL-从另一个表中获取一列以加入此查询

从同一查询的同一列中获取两个值

MySQL在同一个表中加入两个查询

MySQL查询加入同一个表

如何在同一列上基于两个不同条件编写按查询分组返回结果?

获取同一列多行的总值和两个不同行的总和(mysql查询)

SQL Oracle/加入两个查询

两次加入同一个父表的 SQL 查询

加入同一个表的两个 SQL 选择查询并过滤

加入两个表后立即查询结果

mysql查询加入,比较两个表并返回第一个表中的所有记录

Mysql 在几行中的一列中加入两个表和连接值作为字符串

加入两个 SQL 表 - 按表 1 中的列分组而不是表 2

加入两个查询,其中两个查询都加入了两个表

在一个查询中从两个表中删除而不加入

从一个表中的两个不同列中选择数据,这些列指向另一个表中的同一列

在 MS ACCESS 中加入两个不同的计数查询

两次加入同一表中的同一列

从两个不同的表中加入 2 个选择查询(一个查询包括一个聚合函数)