从SQL

时间:2016-11-14 19:36:38

标签: sql-server

我搜索了很多,但我找不到任何有关我的问题的相关信息。我有这样的数据集。

Column1    Column2
   A          B    
   A          B
   A          C
   X          B
   X          B
   Y          C
   Y          B
   T          A
   T          A
   T          A

我可以将Column1与发生的总数区分开来。但实际上我想删除常量行。当我运行查询时,结果应该是这样的;

Column1    Column2
   A          B    
   A          B
   A          C
   Y          C
   Y          B

如上所述,A和Y在Column2中具有不同的值。我该如何查询?我正在使用Sql Server 2014

2 个答案:

答案 0 :(得分:1)

你想在做任何事之前计算配对的出现次数

SELECT ColumnA, ColumnB, count(*)
FROM [source]
GROUP BY ColumnA, ColumnB

这将为您提供每个配对的列表以及它发生的频率。接下来,您想要计算ColumnA中每个值的配对数,并仅使用一个选项来删除它们:

SELECT ColumnA, count(*)
FROM
    (
    SELECT ColumnA, ColumnB, count(*)
    FROM [source]
    GROUP BY ColumnA, ColumnB
    )
GROUP BY ColumnA
HAVING count(*) > 1

这将为您提供您正在寻找的ColumnA值列表。从那里,您希望使用WHERE .. IN语句在原始数据中查找ColumnA的值:

SELECT ColumnA, ColumnB
FROM [source]
WHERE ColumnA IN
    (
    SELECT ColumnA, count(*)
    FROM
        (
        SELECT ColumnA, ColumnB, count(*)
        FROM [source]
        GROUP BY ColumnA, ColumnB
        )
    GROUP BY ColumnA
    HAVING count(*) > 1
    )

答案 1 :(得分:1)

COUNT(DISTINCT ...)可能适用于CTE:

; WITH CTE AS (
    SELECT Column1
    FROM [my_table]
    GROUP BY Column1
    HAVING COUNT(DISTINCT Column2) > 1
)
SELECT t.*
FROM [my_table] t
JOIN CTE ON CTE.Column1 = t.Column1;