Sql server 从SQL中的同一个表ID在列中选择不同的值

Sql server 从SQL中的同一个表ID在列中选择不同的值,sql-server,Sql Server,我已经搜索了很多关于它的信息,但是我找不到任何关于我的问题的相关信息。我有一个这样的数据集 Column1 Column2 A B A B A C X B X B Y C Y B T A T A T A 我可以用发生的总数区分第1列。但实际上我

我已经搜索了很多关于它的信息,但是我找不到任何关于我的问题的相关信息。我有一个这样的数据集

Column1    Column2
   A          B    
   A          B
   A          C
   X          B
   X          B
   Y          C
   Y          B
   T          A
   T          A
   T          A
我可以用发生的总数区分第1列。但实际上我想删除常量行。当我运行查询时,结果应该是这样的

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

如上所述,A和Y在第2列中有不同的值。我如何质疑这一点?我正在使用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值列表。从这里,您可以使用
WHERE.在原始数据中查找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
    )

在你做任何事情之前,你想数一数配对发生的次数

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.在原始数据中查找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
    )
计数(不同…)可能与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;
计数(不同…)可能与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栏的可能性,你想离开他们吗?是的。这正是我想要查询的。所以您想要删除列1中的值在列2中只有一个值的行吗?如果他们有多个第2栏的可能性,你想离开他们吗?是的。这正是我想问的。谢谢你,弗里茨。有了sql server的一些配置,我就可以做到了。谢谢Fritz。通过sql server的一些配置,我可以做到这一点。