我搜索了很多,但我找不到任何有关我的问题的相关信息。我有这样的数据集。
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
答案 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;