从SQL中的同一个表ID中选择不同的值列表
我已经搜索了很多关于它的信息,但是找不到有关我的问题的任何相关信息。我有这样的数据集。从SQL中的同一个表ID中选择不同的值列表
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
你要算配对的出现次数,你做任何事情
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值的列表。从那里,你想寻找ColumnA的这些值在原始数据与WHERE .. IN
声明:
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
)
谢谢Fritz。有了一些配置sql服务器,我可以做到这一点。 –
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;
谢谢约翰。你的解决方案也有效。 –
所以你要删除第1列中的值只有第2列中有一个值的行?如果他们有多个第2列的可能性,你想离开他们? – Fritz
是的。这正是我想要查询的内容。 –