Sql server mssql-基于另一列检索列的唯一值
我有一个包含两列的表:Sql server mssql-基于另一列检索列的唯一值,sql-server,Sql Server,我有一个包含两列的表:ColumnA,ColumnB,其中包含行: |A | 1 | |B|1 | |B | 2 | |C|1 | |C|1 | |C|1 | |A | 2 | |B|1 | |A | 2 | |A | 1 | 我想编写一个查询,返回ColumnB的所有唯一值,对于ColumnA的每个唯一值,其中ColumnA在ColumnB中有一个以上的值,即 |A | 1 | |A | 2 | |B|1 | |B | 2| C 1应该省略,因为ColumnA='C'只有一个不同的值。可能有一
ColumnA
,ColumnB
,其中包含行:
|A | 1 ||B|1 |
|B | 2 |
|C|1 |
|C|1 |
|C|1 |
|A | 2 |
|B|1 |
|A | 2 |
|A | 1 | 我想编写一个查询,返回
ColumnB
的所有唯一值,对于ColumnA
的每个唯一值,其中ColumnA
在ColumnB
中有一个以上的值,即
|A | 1 ||A | 2 |
|B|1 |
|B | 2|
C 1应该省略,因为ColumnA='C'只有一个不同的值。可能有一个更简单的方法,但这是可行的:
SELECT t.ColumnA, t2.ColumnB
FROM ( select ColumnA
from dbo.TableName t
group by t.ColumnA
having count(distinct t.ColumnB) > 1) t
CROSS APPLY ( select distinct t2.ColumnB
from dbo.TableName t2
where t.ColumnA=t2.ColumnA ) t2
第一个子查询返回所有唯一的
ColumnA
值,这些值具有多个(不同的)ColumnB
值。第二个子查询返回那些ColumnA
-值的所有不同ColumnB
值 A列与B列之间似乎没有什么特别之处-您可以在此处执行不同的columna,columnb
。对不起,我忘了添加我要求的第二部分,即columna中的值超过1ColumnB@PanikosStavrou,您可能需要重新编写您的问题。有点模糊。例如,如果您想将tableA连接到TableB,您将使用哪一列?@JonWay只有一列table@IvanP例如,我不想让A-1重复多次。我希望A的位置有多个值(1,2)
SELECT DISTINCT * FROM x WHERE ColumnA IN(
SELECT xd.ColumnA
FROM (
SELECT DISTINCT ColumnA, ColumnB FROM x
) xd
GROUP BY xd.ColumnA HAVING COUNT(*) > 1
)
SELECT y.ColumnA, y.ColumnB
FROM (
SELECT ColumnA, ColumnB, COUNT(*) OVER (PARTITION BY ColumnA) m
FROM x
GROUP BY ColumnA, ColumnB
) y
WHERE m > 1