cjj*_*per 0 sql sql-server join distinct-values
我有 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
Run Code Online (Sandbox Code Playgroud)
表2:
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
Run Code Online (Sandbox Code Playgroud)
我需要连接这两个表并为 tbl1 中的给定 MB# 获取 tbl2 中的唯一 RTU(s)。查询 =
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
Run Code Online (Sandbox Code Playgroud)
我得到了 tbl2 53 和 69(* 以上)的重复行。53 最终有 2 个条目;一到 103 和一个 403(69 相同)。我如何查询到 MB# 的唯一 RTU?
出现重复的行是因为您加入了“17”,每边有 2 行
然后,就目前而言,您不能使用该 SELECT 列表。
你如何决定t1.MB#你想要的 t2 列?
没有我可以看到的辅助 JOIN 列。
所以你能得到的最好的方法是使用 MAX(或 MIN)来选择 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]
Run Code Online (Sandbox Code Playgroud)