如果我跑
SELECT somecolumn FROM sometable GROUP BY somecolumn HAVING count(*) > 1;
输出的somecolumn
值会在sometable
中出现多次。
但我希望看到出现这些重复值的行(或其中的一部分)。例如,如果foo
和bar
是sometable
中感兴趣的其他列的名称,则输出的前几行可能类似于
somecolumn | foo | bar
-------------------------------
123 | foo_1 | bar_2
123 | foo_3 | bar_5
123 | foo_7 | bar_11
234 | foo_13 | bar_17
234 | foo_19 | bar_23
...
等
我怎样才能做到这一点?
答案 0 :(得分:2)
对于数据库无关的解决方案,您可以这样做:
SELECT *
FROM sometable S
WHERE somecolumn IN ( SELECT somecolumn
FROM sometable
GROUP BY somecolumn
HAVING count(*) > 1)
对于SQL Server 2005+,您可以这样做:
;WITH CTE AS
(
SELECT *,
N = COUNT(*) OVER(PARTITION BY somecolumn)
FROM sometable
)
SELECT *
FROM CTE
WHERE N > 1
答案 1 :(得分:0)
您需要将这些列添加到选择以及分组
SELECT
somecolumn,
foo,
bar
FROM
sometable
GROUP BY
somecolumn,
foo,
bar
HAVING count(*) > 1;