2017-05-24 27 views
1

我有一个像下面需要由表理清命名

termnum  dialnum   carrier   cic   mou 
8007779898 8007779898  LEVEL3   432   86,466 
8886605890 8886605890  LEVEL3   5102   83,302 
8779069811 8779069811  LEVEL3   432   69,955 
8779069811 8779069811  LEVEL3   432   69,955 

下面是我使用来获得上表中查询表:

select c.termnum, c.dialnum, c.carrier, c.cic, sum(c.calldur)/60 

from tablec c 
left join tablea a 
on c.dialnum = a.NUMBER8XX 
group by c.termnum, c.dialnum, c.carrier, c.cic 

union 

select c.termnum, c.dialnum, c.carrier, c.cic, sum(c.calldur)/60 

from tablec c 
left join tableb b 
on c.dialnum = b.NUMBER8XX 
group by c.termnum, c.dialnum, c.carrier, c.cic 

Termnum和dianlnum从具体来表格,我试图根据这些数据来整理我的数据。我尝试了不同的案例陈述,但没有结果。 我想获得的数据,因此它看起来象下面这样:使用common table expression

termnum   dialnum   carrier  cic mou table a  table b 
8007779898  8007779898  LEVEL3  432 86,466 X 
8886605890  8886605890  LEVEL3  5102 83,302    X 
8779069811  8779069811  LEVEL3  432 69,955 X   X 
+0

我正在使用sql server管理工作室 –

+0

你可能想发布你的架构以便在这里更好地理解 – maSTAShuFu

回答

2

要给你聚集,然后用case表达与exists()确定dialnum存在于哪些表

;with cte as (
    select c.termnum, c.dialnum ,c.carrier ,c.cic ,sum(c.calldur)/60 as mou 
    from tablec c 
    group by c.termnum, c.dialnum, c.carrier, c.cic 
) 
select c.* 
    , table_a = case when exists (select 1 from tablea a where a.NUMBER8XX = c.dialnum) then 'x' else '' end 
    , table_b = case when exists (select 1 from tableb b where b.NUMBER8XX = c.dialnum) then 'x' else '' end 
from cte c 

刻录而不common table expression

select c.* 
    , table_a = case when exists (select 1 from tablea a where a.NUMBER8XX = c.dialnum) then 'x' else '' end 
    , table_b = case when exists (select 1 from tableb b where b.NUMBER8XX = c.dialnum) then 'x' else '' end 
    from (
    select c.termnum, c.dialnum ,c.carrier ,c.cic ,sum(c.calldur)/60 as mou 
    from tablec c 
    group by c.termnum, c.dialnum, c.carrier, c.cic 
    ) c 
+0

WOW !!!!我甚至不理解这个问题,我想你把它赶出了公园。我们知道谁今天有头脑阅读的帽子。 :) –

+0

@SeanLange只有当我是对的。我还不确定。 OP可能想要完全加入所有值或某物 - 或者从主表和两个子表中拉出...等待OP的一些评论。 – SqlZim

+0

@SqlZim感谢您的帮助。第一个表基本上是一个表c,并且没有来自表a和表b的列 要知道termnums是否来自这些表中的一个,我通过termnum将table c和table b连接到表c,但是我不能生产我在下面显示的所需表格 –

0

根本不需要case。只需在结果中添加一个静态列即可。

select c.termnum, c.dialnum, c.carrier, c.cic, sum(c.calldur)/60, 'A' as SourceTable 

from tablec c 
left join tablea a 
on c.dialnum = a.NUMBER8XX 
group by c.termnum, c.dialnum, c.carrier, c.cic 

union 

select c.termnum, c.dialnum, c.carrier, c.cic, sum(c.calldur)/60, 'B' as SourceTable 

from tablec c 
left join tableb b 
on c.dialnum = b.NUMBER8XX 
group by c.termnum, c.dialnum, c.carrier, c.cic 
+0

我不想将表格信息放在一列的Sourcetable中。我需要通过显示两个表格列来显示它是如何得到这些信息的。所以,我的经理读起来会更容易。 –