簡體   English   中英

將多個查詢合並為一個查詢

[英]Combine multiple queries into one query

我正在嘗試按clientidm.id 如何將這2個查詢轉換為1個查詢?

查詢1

select cs.clientid, count(distinct(m.id)) as cp
into #temp
from call_table cs 
join mem_table m 
on cs.CLIENTID = m.clientid
join activity_table a 
on a.memid = m.id 
where a.activity = 'abc'
group by cs.clientid, m.id 

查詢2

select clientid, sum(cp) from #temp
group by ClientId

更新

更具體地說,我希望在不使用臨時表的情況下編寫此查詢。

您只能按clientid分組

並且由於沒有選擇來自activity_table的字段,因此可以使用EXISTS代替。

select cs.clientid, count(distinct m.id) as cp
from call_table cs 
join mem_table m on m.clientid = cs.clientid
where exists 
(
    select 1
    from activity_table a 
    where a.memid = m.id 
      and a.activity = 'abc'
)
group by cs.clientid

你為什么不這樣寫:

with temp as (
      select cs.clientid, count(distinct m.id) as cp
      from call_table cs join
           mem_table m 
           on cs.CLIENTID = m.clientid join
           activity_table a 
           on a.memid = m.id 
      where a.activity = 'abc'
      group by cs.clientid, m.id 
     )
select clientid, sum(cp)
from temp
group by ClientId;

我無法弄清楚邏輯究竟應該是什么,但這似乎是組合查詢的最簡單方法。

我推測您只需要此查詢:

      select cs.clientid, count(distinct m.id) as cp
      from call_table cs join
           mem_table m 
           on cs.CLIENTID = m.clientid join
           activity_table a 
           on a.memid = m.id 
      where a.activity = 'abc'
      group by cs.clientid;

也就是說,通過將該m.idgroup by刪除。 而這又可以簡化為:

      select m.clientid, count(distinct m.id) as cp
      from mem_table m join
           activity_table a 
           on a.memid = m.id 
      where a.activity = 'abc'
      group by cs.clientid;

假設m.id是唯一且非NULL ,則可以進一步簡化為:

      select m.clientid, count(*) as cp
      from mem_table m join
           activity_table a 
           on a.memid = m.id 
      where a.activity = 'abc'
      group by cs.clientid;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM