我有一个包含两列的表格: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
中的值超过1即
| A | 1 |
| A | 2 |
| B | 1 |
| B | 2 |
C 1应该省略,因为ColumnA =' C'
只有一个不同的值答案 0 :(得分:3)
可能有一种更简单的方法,但这有效:
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
值。第二个子查询返回ColumnB
- CROSS APPLY
值的所有不同 ColumnA
值。
答案 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