也许是一个简单的问题,我就是找不到答案。 Im的MySQL结果如下
Col1 | Col2
A | 1
A | 2
B | 1
我希望它输出以下内容:
Col1 | Col2
A | 1
| 2
B | 1
我怎么能那么做? 当使用GROUP BY时,he仍然在第一列中显示所有的“A”,我希望在第一次出现时只显示一次。
提前谢谢!
在不存在
的情况下使用大小写
表达式:
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
的定义相匹配。