2017-09-27 4 views
1

現在、スイッチに3つのポートが使用されており、以下のSQLでトラフィックを監視しようとしています。同じ行が複数回返される

select a.interface, a.utilization_in, b.utilization_out from 
(select z.source as interface, y.samplevalue as utilization_in from #TABLE1 z 
join #TABLE2 y 
on z.table_id = y.table_id 
where z.source = 'switch1' and z.port like 'port_in%') a 

INNER JOIN 

(select x.source as interface, w.samplevalue as utilization_out from #TABLE1 x 
join #TABLE2 w 
on x.table_id = w.table_id 
where x.source = 'switch1' and x.port like 'port_out%') b 
on a.interface=b.interface 

これは私に結果を取得しますが、それぞれの行が数回繰り返され、3×3 = 9は、私の周りを検索し、いくつかは、UNION演算子を使用していることが判明しています。しかし、私はそれを置く場所でも迷っています。ありがとう

答えて

0

ユニオンとは、同じ数の列を持ち、両方の結果を1つの結果セットとして提示する2つの別個のSELECTクエリを持つことを意味します。

だから基本的にはこれです:

SELECT ... FROM ... WHERE ... 

UNION 

SELECT ... FROM ... WHERE ... 

UNIONも同様distinctを行いますので、それは重複行を返さないことに注意してください。あなたは明確なをしたくない場合は、UNION ALL

+0

それは彼に彼が望むものを与えません。 – sagi

0
select z.source as interface, y.samplevalue as utilization_in from #TABLE1 z 
join #TABLE2 y 
on z.table_id = y.table_id 
where z.source = 'switch1' and z.port like 'port_in%' 

UNION ALL -- or use just UNION if there are could be duplicates in both parts 

select x.source as interface, w.samplevalue as utilization_out from #TABLE1 x 
join #TABLE2 w 
on x.table_id = w.table_id 
where x.source = 'switch1' and x.port like 'port_out%' 

を使用していますが、同じ結合条件を持っており、唯一の違いは、ポートであるとして、あなたは次のクエリ使用する可能性があります:

select z.source as interface, y.samplevalue as utilization, CASE WHEN z.port like 'port_in%' THEN 'IN' ELSE 'OUT' END as in_or_out 
from #TABLE1 z 
join #TABLE2 y 
on z.table_id = y.table_id 
where z.source = 'switch1' 
+0

しかし、それは彼が望むものを供給しません。 'インターフェース| uti_in | uti_out' – sagi

+0

新しい列を提供することによって(少なくともユニオンのないクエリ) –

0

ちょうど条件付きの使用をあなたは一度テーブルから選択するだけです。

select x.source as interface, 
     MAX(CASE WHEN x.port like 'port_out%' THEN w.samplevalue END) as utilization_out, 
     MAX(CASE WHEN x.port like 'port_in%' THEN w.samplevalue END) as utilization_in 
from #TABLE1 x 
join #TABLE2 w 
on x.table_id = w.table_id 
where x.source = 'switch1' 
GROUP BY x.source 
+0

これはまさに私が必要としたものです。ありがとう!! – kneten

関連する問題