【问题标题】:Display format for repeating value in each column每列重复值的显示格式
【发布时间】:2018-11-12 01:20:14
【问题描述】:

我有一个包含 3 列的组织的表结构:

  • 部门
  • 部分
  • 小节


DEPARTMENT  SECTION     SUBSECTION
----------  --------    -----------
A           A1          A101
A           A1          A102
A           A2          A201
A           A2          A202
B           B1          B101
B           B1          B102
B           B2          B201
B           B2          B202

而且我想在某种意义上显示每一列,它只显示重复值的第一次出现。预期输出如下,

DEPARTMENT  SECTION     SUBSECTION
----------  ---------   -----------
A           A1          A101
                        A102
            A2          A201
                        A202
B           B1          B101
                        B102
            B2          B201
                        B202

【问题讨论】:

  • 这应该在表现层完成。
  • @PM77-1 ,如果不能在数据库层完成,那也是我的下一步。
  • 可以用 SQL 完成,但不应该。

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

正如 cmets 中所说,您应该在应用层中真正做到这一点;但是您可以使用窗口函数来完成此操作:

declare @tmp table (DEPARTMENT varchar(1), SECTION varchar(2),   SUBSECTION varchar(4))
insert into  @tmp values
     ('A', 'A1', 'A101')
    ,('A', 'A1', 'A102')
    ,('A', 'A2', 'A201')
    ,('A', 'A2', 'A202')
    ,('B', 'B1', 'B101')
    ,('B', 'B1', 'B102')
    ,('B', 'B2', 'B201')
    ,('B', 'B2', 'B202')

select
  case when rn_dep = 1 then DEPARTMENT else '' end as DEPARTMENT
, case when rn_sec = 1 then SECTION    else '' end as SECTION
, SUBSECTION
from (
    select 
      DEPARTMENT,SECTION, SUBSECTION
    , ROW_NUMBER() OVER (partition by DEPARTMENT ORDER BY DEPARTMENT, SECTION, SUBSECTION) as rn_dep
    , ROW_NUMBER() OVER (partition by DEPARTMENT, SECTION ORDER BY SECTION, SUBSECTION) as rn_sec
    from @tmp
) T

结果:

【讨论】:

  • 谢谢,这样会更快,我也是在应用层设计的。
猜你喜欢
  • 2016-09-07
  • 2014-12-27
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多