【问题标题】:SQL- Grouping all data for one specific IDSQL- 为一个特定 ID 对所有数据进行分组
【发布时间】:2018-08-30 13:58:05
【问题描述】:

我确信有一个简单的解决方案,但我无法解决这个问题。所以我有一个包含几列的表:

ID、摘要、用户

但是,对于一个 ID,有多个用户,每个用户都有不同的摘要。所有这一切都很好,但是每个用户的 ID 都会不断重复。我只想显示一次 ID 和它的所有数据。

例子:

ID | Summary | Users
5  | Hi      | me 
5  | Hello   | you
5  | Stack   | him
5  | Over    | someone

我想要它做什么:

ID | Summary | Users
5  | Hi      | me 
   | Hello   | you
   | Stack   | him
   | Over    | someone

因此 ID 5 将仅显示为一行,而不是 4 个不同的行。 我正在尝试一些案例陈述,但这没有帮助。 group by 子句需要一个聚合函数,这将导致总和或计数,而不是实际 ID。我有点迷路了,或者我错过了一些东西。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 您使用的是 MySQL 还是 SQL Server?
  • SQL Server 2017 @TimBiegeleisen

标签: sql-server ssrs-2008 reportbuilder3.0


【解决方案1】:

这可能最好在您的表示层中处理,例如像 PHP 或 Java 这样的东西。但是,可能有一种方法可以直接从 SQL Server 执行此操作:

SELECT
    CASE WHEN ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Summary) = 1
         THEN CONVERT(varchar(10), ID)
         ELSE '' END AS ID_value,
    Summary,
    Users
FROM yourTable
ORDER BY
    ID,
    Summary;

Demo

为了完成这项工作,需要某种排序,我们可以说一组ID值中的某个记录是“第一”,因此应该报告ID值,而另一个没有。我为此使用了ROW_NUBMER,并按字母顺序显示了第一个汇总值的ID 值。另请注意,我需要将ID 转换为CASE 表达式中的文本,以便我们可以使用空字符串来显示不显示的ID 记录。

【讨论】:

  • 你是救生员!非常感谢您的清晰解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2023-01-11
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多