我写了一个代码,该代码应该可以算出我在专栏中多次找到的名字
这是每列代表的内容:
col1 = Ids (float, null)
col2 = names (nvarchar(255), null)
col3 = region (nvarchar(255), null)
col4 = end_date (datetime, null)
每个表都有col2,这就是我能够链接它们的方式。
这是我编写的代码:
SELECT DISTINCT T.col1, T2.col2, T2.col3, col4
FROM tab1 AS T
INNER JOIN tab2 AS T2 ON T.col2=T2.col2
WHERE col2 IN
(SELECT [col2] FROM [tab1] GROUP BY [col2] HAVING COUNT(*) > 1)
AND T.col4 IS NULL
ORDER BY T.col2 ASC
基本上,我几乎得到了想要的结果,但是我的代码中缺少一些东西。我只希望col2中包含相同名称的值,以便我可以对它们进行计数和隔离。我试图在 SELECT 语句中使用 COUNT 函数,但未获得预期的结果。我不确定,但我相信可能是数据类型可能会弄乱计数。
以下是我得到的当前结果的示例:
col1 col2 col3 col4
1222222222 Bus1 NY NULL
1333333333 Bus2 NY NULL
1444444444 Bus3 NY NULL
1555555555 Bus4 NY NULL
1666666666 Bus4 NY NULL
1777777777 Bus5 NY NULL
这是我期望并希望实现的目标:
col1 col2 col3 col4
1555555555 Bus4 NY NULL
1666666666 Bus4 NY NULL
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
您要查找的是表本身的内部联接。
SELECT a.col1, a.col2, a.col3, a.col4
FROM test a
INNER JOIN test b ON a.col2 = b.col2
WHERE a.col1 <> b.col1
我在这里进行了测试,它返回您想要的内容: 看看:http://www.sqlfiddle.com/#!9/cdb4df/37
答案 1 :(得分:0)
假设col1
是唯一的,则可以使用EXISTS:
select t.* from tab1 t
where exists (
select 1 from tab1
where col1 <> t.col1 and col2 = t.col2
)