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
這些是包含電話類型和電話號碼的兩個表。
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
這是我迄今爲止,但它不能正常工作。有時,它顯示了2次重複,有時它只是顯示1個記錄..
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
這並不編譯它說錯誤的ph.phone_type和cs.phone_np'列名無效' –
我添加了一個編輯@shinratensei cs.phone_np應該是cs.phone_no,這是一個簡單的類型。 ph.phone_type應該沒有錯誤。確切的錯誤是什麼? – scsimon
對不起,它正在工作,只是檢查結果。 –