提问者:小点点

只显示一次相同值的SQL结果


也许是一个简单的问题,我就是找不到答案。 Im的MySQL结果如下

Col1 | Col2    
A    | 1    
A    | 2   
B    | 1

我希望它输出以下内容:

Col1 | Col2
A    | 1
     | 2
B    | 1

我怎么能那么做? 当使用GROUP BY时,he仍然在第一列中显示所有的“A”,我希望在第一次出现时只显示一次。

提前谢谢!


共2个答案

匿名用户

不存在的情况下使用大小写表达式:

select
  case when not exists (select 1 from tablename where col1 = t.col1 and col2 < t.col2) then t.col1 end col1,
  t.col2
from tablename t
order by t.col1, t.col2

请参阅演示。
结果:

| col1 | col2 |
| ---- | ---- |
| A    | 1    |
|      | 2    |
| B    | 1    |

匿名用户

您应该在应用程序中,而不是在数据库中进行这种类型的格式化。 为什么? 您的结果并不是一个真正有效的表,因为第二行的定义取决于第一行。 在SQL表中,每一行都应该独立存在。

但是,如果你小心的话,你可以这样做:

select (case when seqnum = 1 then col1 end) as col1, col2
from (select t.*,
             row_number() over (partition by col1 order by col2) as seqnum
      from t
     ) t
order by col1, seqnum;

为了保持一致,外部order by必须与seqnum的定义相匹配。