如何在SQL Server / Excel语法中选择多列中有重复项的记录?

p8ekf7hl  于 2023-02-03  发布在  SQL Server
关注(0)|答案(2)|浏览(155)

我有下表:
[Sheet1$]
| 集团|分部|姓名|
| - ------|- ------|- ------|
| 五百五十五|第二章|亚当|
| 五百五十五|1个|鲍勃|
| 四四四|1个|莎拉|
| 五百五十五|第二章|安|
| 四四四|1个|杰夫|
我想从[Sheet1$](我正在使用Excel和ODBC)中选择所有具有相同GroupDivision但具有多个Names的记录。我需要结果列表中的所有3列。
结果应如下所示:
| 集团|分部|姓名|
| - ------|- ------|- ------|
| 五百五十五|第二章|亚当|
| 五百五十五|第二章|安|
| 四四四|1个|莎拉|
| 四四四|1个|杰夫|
下面的查询会导致错误:

SELECT [Group], [Division], [Name], COUNT(*)
FROM [Sheet1$]
GROUP BY [Group], [Division] 
HAVING COUNT(*) > 1

上面的查询不起作用,因为根据我的理解,GROUP BY子句中没有包含一列,但由于我的SQL生疏,对MS/Excel SQL语法一无所知,我似乎无法形成一个有效的查询。我应该如何设置正确的查询格式?

7eumitmz

7eumitmz1#

如果您需要重复的行与个别所有者,您将不得不做一些就地连接。

SELECT [Joint Venture], [Division of Interest], [Owner]
FROM [Sheet1$]
WHERE CONCAT([Joint Venture], [Division of Interest]) IN
(
   SELECT CONCAT([Joint Venture], [Division of Interest])
   FROM [Sheet1$]
   GROUP BY [Joint Venture], [Division of Interest]
   HAVING COUNT (*) > 1
)

这是假设Excel的ODBC驱动程序支持CONCAT()方法。如果它不支持CONCAT()方法,那么如果CONCAT()不起作用,您 * 可能 * 在两个地方都尝试[Joint Venture] + [Division of Interest]

oiopk7p5

oiopk7p52#

如果要将GROUP BY子句应用于SQL语句,则SELECT子句中所有未聚合的列都必须包含在GROUP BY子句中。
因此,在您的示例中,基本上有三个选项。

向[Owner]列添加某种“聚合”

SELECT [Joint Venture], [Division of Interest], MIN([Owner]), COUNT(*)
FROM [Sheet1$]
GROUP BY [Joint Venture], [Division of Interest] HAVING COUNT(*)>1

将[Owner]列添加到GROUP BY子句(如果不想应用聚合)

SELECT [Joint Venture], [Division of Interest], [Owner], COUNT(*)
FROM [Sheet1$]
GROUP BY [Joint Venture], [Division of Interest], [Owner] HAVING COUNT(*)>1

--或--从SELECT子句中删除[Owner]列

SELECT [Joint Venture], [Division of Interest], COUNT(*)
FROM [Sheet1$]
GROUP BY [Joint Venture], [Division of Interest] HAVING COUNT(*)>1

相关问题