Sql-Server

為同一表的其他列中的每個不同值查找每一行中出現的值

  • February 9, 2017

我需要一個 select 語句,它從 Column 中查找值,該值B出現在A. 在我的範例中意味著它將返回: x因為x出現在A. (1,2,3 和 4)

我不知道 Column 中有哪些值,B所以我無法在查詢中指定它。如何在 SQL Server 2014 中實現這一點?

   +---+----+
   | A | B  |
   +---+----+
   | 1 | x  |
   | 2 | x  |
   | 3 | y  |
   | 4 | y  |
   | 3 | x  |
   | 4 | x  |
   +---+----+

按 B 計算不同的 A 分組,並返回 count(distinct A) 匹配的那些。

select B, count(distinct A)
from table_AB
group by B
having count(distinct A) = (select count(distinct A) from table_AB);

B   A 
=== ===
x   4

您也可以row_number()使用

drop table #Table1
CREATE TABLE #Table1
   ([A] int, [B] varchar(1))
;

INSERT INTO #Table1
   ([A], [B])
VALUES
   (1, 'x'),
   (2, 'x'),
   (3, 'y'),
   (4, 'y'),
   (3, 'x'),
   (4, 'x'),
   (4, 'y'),
   (5, 'y'),
   (5, 'x')
;

;with cte as (
   select *, row_number() over (partition by B order by (select null)) as rn
   from #Table1
   )
   select B from cte 
   where rn = (select max(rn) from cte)

引用自:https://dba.stackexchange.com/questions/163635