1
テーブルに重複する行を示すクエリがあります。今、別のテーブルのデータフィールドをクエリに追加する方法について説明します。SQL Server:サブクエリの別のテーブルのデータフィールドを追加
SELECT
T1.lname, T1.fname, T1.rtg_id
FROM
(SELECT
lname, fname, rtg_id
FROM
cpmd b
GROUP BY
lname, fname, rtg_id
HAVING
COUNT(*) >= 2) T1
JOIN
cpmd T2 ON T1.lname = T2.lname
AND T1.fname = T2.fname
AND T1.rtg_id= T2.rtg_id
ORDER BY
lname, fname
これは、以下の結果になり:私は一人一人の電話番号、ファックス番号を取得する必要があります
(私はあなたのためだけにここにあった、私の実際のクエリでIDを削除しました)。いくつかのレコードは、同じ名前などが異なる電話番号とファックス番号を持つことがあります。このようなものが必要です:
md_id lname fname rtg_id Home Fax
-------------------------------------------------------------
9901 Smith John 12300 (654) 5894676 (231) 7684353
9902 Smith John 12300 (546) 4576369 NULL
9903 Lee Bob 45600 (654) 9844576 (234) 2835657
9904 Lee Bob 45600 (778) 6780853 NULL
これらは、電話の種類と電話番号を含む2つのテーブルです。
cpmd_phone
テーブル:
md_id phone_id phone_type
------------------------------
9901 90 FAX
9901 91 HOME
9902 92 FAX
9902 93 HOME
9903 94 FAX
9903 95 HOME
9904 96 FAX
9904 97 HOME
csphone
テーブル
phone_id area_code phone_no
---------------------------------
90 231 7684353
91 654 5894676
92 null null
93 546 4576369
94 234 2835657
95 654 9844576
96 null null
97 778 6780853
は、これは私がこれまで持っているものですが、それは正しく動作しません。時にはそれが
SELECT
T1.lname, T1.fname, T1.asmdid, T1.rtg_id, t1.Phone, T1.Fax
FROM
(SELECT
lname, fname, rtg_id,
MIN(b.md_id) AS asmdid,
MIN(CASE WHEN (d.phone_type_cn = 2)
THEN '(' + e.area_code + ') ' + e.phone_no
ELSE NULL
END) AS Phone,
MIN(CASE WHEN (d.phone_type_cn = 4)
THEN '(' + e.area_code + ') ' + e.phone_no
ELSE NULL
END) AS Fax
FROM
cpmd b
JOIN
cpmd_phone d on b.md_id = d.md_id
JOIN
csphone e ON d.phone_id = e.phone_id
GROUP BY
lname, fname, rtg_id
HAVING
COUNT(*) >= 2) T1
JOIN
cpmd T2 ON T1.lname = T2.lname
AND T1.fname = T2.fname
AND T1.rtg_id = T2.rtg_id
AND T1.asmdid <> T2.md_id
ORDER BY
lname, fname
が、これはそれが上の誤りを言うコンパイルされません... case文と合流するのカップルのように聞こえる...時にはそれはちょうど1つのレコードを表示し、2つの重複を示しph.phone_typeとcs.phone_np '無効な列名' –
私は編集を追加しました@ shinratensei cs.phone_npはcs.phone_noになっていたので、単純なタイプです。 ph.phone_typeにエラーはないはずです。正確なエラーは何でしたか? – scsimon
申し訳ありませんが、結果を確認するだけで動作しています。 –