2017-05-24 26 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中。我需要通過顯示兩個表格列來顯示它是如何得到這些信息的。所以,我的經理讀起來會更容易。 –