SQL 复杂联接的 Pivot

SQL PIvot for a complex join

我有一个 table 可以捕获经理的名称值组。因此,例如,id 为 1 的经理有两个组值对:location=dublin 和 dept=sales.

GROUP VALUE MANAGERID
LOCATION DUBLIN 1
DEPT SALES 1
LOCATION OSLO 2
DEPT SALES 2
LOCATION LONDON 3
DEPT SALES 3

我有另一个 table 有员工分组...

GROUP VALUE EMPLOYEEID
LOCATION DUBLIN 101
DEPT SALES 101
LOCATION DUBLIN 102
DEPT SALES 102
LOCATION DUBLIN 103
DEPT SALES 103
SHOESIZE 15 103
LOCATION OSLO 104
DEPT SALES 104

我想获得至少与特定经理具有相同分组的所有员工的列表。因此,例如,id 为 1 的经理是 location=dublin 和 dept=sales,具有这些组值的员工至少是 101,102 和 103,但不是 104。

我事先不知道组列或值列的值。如果我对 group 和 value 列进行简单的内部连接,然后进行不同的连接,我会得到 101、102、103 和 104

有什么想法吗?

您可以通过 CROSS 连接表和条件聚合来实现:

SELECT e.EMPLOYEEID
FROM managers m CROSS JOIN employees e
WHERE m.MANAGERID = 1
GROUP BY e.EMPLOYEEID
HAVING COUNT(DISTINCT m."GROUP") = 
       COUNT(CASE WHEN e."GROUP" = m."GROUP" AND  e."VALUE" = m."VALUE" THEN 1 END)

参见demo
结果:

EMPLOYEEID
101
102
103