在每一列中重复显示值的显示格式

时间:2018-11-12 01:20:15

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

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

  • 部门
  • 部分
  • SUBSECTION


[(3, 0.08666666666666667),(4, 0.08666666666666667)]

从某种意义上讲,我想显示的是每列,它仅显示重复值的首次出现。预期输出如下,

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

1 个答案:

答案 0 :(得分:3)

正如评论中所述,您应该在应用程序层中真正做到这一点;但是,您可以使用窗口功能来完成此操作:

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

结果:

enter image description here