在SQL中计算具有不同ID的名称

时间:2019-06-10 16:05:03

标签: sql count distinct

我写了一个代码,该代码应该可以算出我在专栏中多次找到的名字

这是每列代表的内容:

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

任何帮助将不胜感激,谢谢!

2 个答案:

答案 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
)