SQL-将所有数据归为一个特定的ID

时间:2018-08-30 13:58:06

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

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

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。我有点迷失或错过了一些东西。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

这可能最好在您的表示层中处理,例如像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;

enter image description here

Demo

为了使此工作有效,需要进行某种排序,我们可以说一组ID值中的某个记录是“第一”,因此应报告{{1 }}值,而其他则没有。为此,我使用了ID,并按字母顺序显示了第一个汇总值的ROW_NUBMER值。另一个注意事项,我需要将ID强制转换为ID表达式中的文本,以便我们可以对未显示的CASE记录使用空字符串。