0

我正在寻找一种方法来显示一组多个属性多次出现的表格。

例如,假设我有一个表 Tbl1,其属性为 A、B、C、D、E 我如何进行查询以使其仅显示 A、B、C 出现多次的行(如在同一个 A、 B、C 作为一组),但 D 和 E 可能不同,也可能不同?

我的尝试:

SELECT *
FROM Tbl1
WHERE COUNT(A, B, C) > 1

我得到一个错误:“这里不允许使用组功能”

4

2 回答 2

1

这样做的原因是,您不能在WHEREsql 子句的 -part 中使用此分组。

SELECT colums
FROM tables
WHERE condition

条件是指表的单行。

你想要的是HAVING

SELECT colums
FROM tables
HAVING condition

之后的条件在分组后HAVING评估,您可以使用聚合函数,如或COUNTSUM

于 2013-07-22T17:39:17.167 回答
0

使用GROUP BY子句(SQL Server: http: //msdn.microsoft.com/en-us/library/ms177673.aspx,MySQLhttp ://www.tutorialspoint.com/mysql/mysql-group-by-clause.htm )。

在每个组中,您需要获取该组中的行数(使用COUNT(*)),然后使用HAVING子句过滤该计数。HAVING就像一个WHERE子句 for GROUP BY。它过滤分组的结果,并且可以引用分组的列(在本例中为 A、B 和 C)或任何聚合(在本例中为COUNT(*))。

这是您的查询的样子。请注意,您只能在SELECT字段列表中包含 中提到的GROUP BY或 包含在聚合函数(例如COUNT()和)中的列MAX()。MySQL 将允许您将其他列放入其中,但 SQL Server 会给您一个错误。即使数据库允许,最好遵循此规则。

SELECT A,
       B,
       C,
       COUNT(*) AS GroupCount
  FROM Tbl1
 GROUP BY A, B, C
HAVING COUNT(*) > 1

如果您想要完整的行,那么您可以使用派生表:

SELECT *
  FROM Tbl1
  JOIN (
    SELECT A,
           B,
           C,
           COUNT(*) AS GroupCount
      FROM Tbl1
     GROUP BY A, B, C
    HAVING COUNT(*) > 1
  ) AS duplicates
    ON duplicates.A = Tbl1.A AND
       duplicates.B = Tbl1.B AND
       duplicates.C = Tbl1.C
于 2013-07-22T17:39:50.010 回答