2012-03-09 5 views
0

私は、2つのテーブルを結合し、そこから一意の行を選択する必要があります。ここに私のデータのサンプルです:(複数の列がある)2つのテーブルを結合する一意の値を取得できません。

tbl1: 
MB# MBName PCCNo_PRI Primary_IP  PCCNo_SEC   Secondary_IP ID 
100 name 0    10.1.9.10  30    10.1.9.10  1 
103 name3 17    10.1.9.27  47    10.1.9.67  4 
403 name13 17    10.1.9.27  47    10.1.9.67  14 

TBL2:

RTU PCC#_PRI PCC#_SEC STATION ADDRESS 
15 0   30   6 
52 12   42   1 
53* 17   47   1 
54 18   48   1 
63 9   39   2 
69* 17   47   2 

私が与えられたために2つのテーブルを結合し、TBL2にユニークなRTU(複数可)を取得する必要がありますtbl1のMB#。 クエリ=

SELECT t1.MB#,t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
INTO C300_RTU_MASTERBLK_Map 
FROM mbm_PCDIMasterBlk_tbl as t1, dbo.WOA_PCC_Conn_tbl as t2 
WHERE t1.PCCNo_PRI = t2.PCC#_PRI 

私は(*上記)TBL2 53と69のために重複した行を取得しています。 53は2つのエントリで終わります。 1〜103と1つの403(69は同じになる)。これをMBUに一意のRTU(s)としてどのように問い合わせることができますか?あなたはその後、それぞれの側

上の2行を与える「17」に参加するため

+0

のいずれかを選択するMAX(またはMIN)を使用しているあなたは、あなたの結果はどうあるべきかを投稿することができますか?あなたはどの列を必要とするかをどうやって決めるのですか?たとえばpccNo_pri = 17の場合は53、69が必要ですか?論理は何ですか? – Kaf

+0

'RTU'と' MB# 'の組み合わせの完全なセットを望むなら、結果は正しいです。結果は(RTU、PCCNo_PRI、MB#):(53,17,103)、(53,17,403)、(69,17,103)、(69,17,403) 。あなたのデータには、同じRTUが複数のMB#に適用されるコンボが明確に含まれているので、実際の問題は何ですか?どの行が「間違っているか」をどのように特定しますか? –

+0

良い質問です。私はあなたが私の問題を露呈していると思います。私はそれが何であるべきかを知っていますが、皆さんが指摘するまで私の欠陥を見ることはできませんでした。これらのテーブルの1つをやり直すことができるかどうかを見てみましょう。 – cjjeeper

答えて

4

重複行は、SELECTリストで、そのままで、することはできません、表示されます。
t2の列にはどのようにしてt1.MB#が必要ですか?

私が見ることができるセカンダリJOIN列はありません。
だから、あなたが得ることができる最高は403または103

SELECT 
    MAX(t1.MB#) AS MB#, 
    t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
INTO C300_RTU_MASTERBLK_Map 
FROM 
    dbombm_PCDIMasterBlk_tbl as t1 
    JOIN 
    dbo.WOA_PCC_Conn_tbl as t2 ON t1.PCCNo_PRI = t2.PCC#_PRI 
GROUP BY 
    t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
+0

良いコードでは重複はなくなりますが、正しい結果は得られません。 53&69がMB#403に割り当てられる。 53は103と69〜403に行くべきです。私は、結果がどうあるべきかを判断する方法について質問します。私は実際には、論理的な割り当てのためではなく行の処理の順序のために、53に103が割り当てられることに気づいています。 – cjjeeper

+0

これは答えです。私は戻ってtbl1を修正しました(どのようにデータを取り込んでいるのかのエラーが見つかりました)。ありがとうgbn。 – cjjeeper

関連する問題