【问题标题】:How to find matches in a data table in SQL?如何在 SQL 的数据表中查找匹配项?
【发布时间】:2022-11-12 14:56:24
【问题描述】:

我有一个任务。

问题:有人知道一个简单的解决方案吗?我找不到解决问题的方法。

Try it: 

DROP TABLE IF EXISTS #Employees;
GO

CREATE TABLE #Employees
(
EmployeeID  INTEGER,
License     VARCHAR(100),
PRIMARY KEY (EmployeeID, License)
);
GO

INSERT INTO #Employees VALUES
(1001,'Class A'),
(1001,'Class B'),
(1001,'Class C'),
(2002,'Class A'),
(2002,'Class B'),
(2002,'Class C'),
(3003,'Class A'),
(3003,'Class D');
GO

我的尝试,但它不起作用。有人有好主意吗?

SELECT * 
FROM #Employees as e1
LEFT JOIN (SELECT * 
            FROM #Employees 
            WHERE 1 = 1 
              AND EmployeeID = 2002 ) as e2   ON e1.License = e2.License
LEFT JOIN (SELECT * 
            FROM #Employees 
            WHERE 1 = 1 
              AND EmployeeID = 3003 ) as e3   ON e1.License = e3.License
WHERE 1 = 1 
  AND e1.EmployeeID = 1001

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

如果您的 SQL Server 版本支持STRING_AGG 函数(SQL Server 2017 (14.x) 及更高版本),您可以执行两个级别的聚合,如下所示:

SELECT EmpLic, STRING_AGG(EmployeeID, ',') AS EmpsWithSimilarLic
FROM
(
  SELECT EmployeeID,
       STRING_AGG(License, ',')  WITHIN GROUP (ORDER BY License) AS EmpLic
  FROM #Employees
  GROUP BY EmployeeID
) T
GROUP BY EmpLic
HAVING COUNT(*) > 1

请参阅demo

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2019-12-29
    • 2011-09-05
    • 2012-11-07
    相关资源
    最近更新 更多