我已经检查了所有相关问题,但无法准确找到我需要的内容。
我需要返回每个记录中某个特定字段相同的任何数据,但我无法使用group by
,因为我需要查看所有重复的记录,我不仅仅是想要数一数。
我尝试过使用group by
和having count(field) > 1
以及各种形式的简单select
以及其他尝试使用count()
但没有运气的方式。
基本上我需要看到表中的所有内容,除了一个特定字段具有唯一值的位置。如果它不是唯一的,我需要查看它。
还有其他where
要求,但为了简单起见,我不在此处。我正在使用SSMS 2008 R2。
由于
示例:
数据:
Col1 | Col2 | Col3
----------------------
abc wow 13/05/2016
abc wow 10/05/2016
def wow 13/05/2016
ghi wow 13/05/2016
ghi wow 10/05/2016
jkl wow 01/01/2016
预期结果:
Col1 | Col2 | Col3
----------------------
abc wow 13/05/2016
abc wow 10/05/2016
ghi wow 13/05/2016
ghi wow 10/05/2016
我希望在Col1中显示任何没有唯一值的内容
答案 0 :(得分:3)
您可以使用以下查询:
SELECT Col1, Col2, Col3
FROM (
SELECT Col1, Col2, Col3,
COUNT(*) OVER (PARTITION BY Col1) AS cnt
FROM mytable) AS t
WHERE t.cnt > 1
查询使用COUNT
聚合函数的窗口版本:该函数应用于Col1
个分区。外部查询过滤掉Col1
值只出现一次的记录。
答案 1 :(得分:1)
目前还不是很清楚你想要做什么,但也许这就是你想要的东西?
with MyDupes as
(
Select MyColumnWithDupes
, COUNT(*) as RowCount
from SomeTable
Group by MyColumnWithDupes
)
select *
from SomeTable st
join MyDupes md on md.MyColumnWithDupes = st.MyColumnWithDupes
where md.RowCount > 1