Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server mssql-基于另一列检索列的唯一值_Sql Server - Fatal编程技术网

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