TSQL合并和分组值

ale*_*sic 0 t-sql sql-server merge

我有这个sql结果

color    red     AA
color    red     BB
color    red     CC
color    blue    DD
color    blue    EE
Run Code Online (Sandbox Code Playgroud)

有没有办法按列合并,以获得以下结果?

color    red     AA
                 BB
                 CC
         blue    DD
                 EE
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 6

这通常是您在应用程序的表示层上执行的操作,但如果要在SQL中执行此操作,则可以使用row_number():

select 
  case when col1rn = 1 then col1 else '' end col1,
  case when col2rn = 1 then col2 else '' end col2,
  col3
from
(
  select col1, col2, col3,
    row_number() over(partition by col1 order by col1, col2, col3) col1rn,
    row_number() over(partition by col1, col2 order by col1, col2, col3) col2rn
  from yt
) d;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.您将替换from yt您的查询,给出结果:

|  COL1 | COL2 | COL3 |
-----------------------
| color | blue |   DD |
|       |      |   EE |
|       |  red |   AA |
|       |      |   BB |
|       |      |   CC |
|  test | blue |   CC |
|       |  red |   AA |
|       |      |   BB |
Run Code Online (Sandbox Code Playgroud)