我对这些结果有疑问:
A | 1
A | 2
B | 1
B | 2
B | 3
如何让结果如下:
A | 1
| 2
B | 1
| 2
| 3
答案 0 :(得分:4)
这是一种方式:
SELECT CASE WHEN rn = 1 THEN c1 ELSE NULL END || ' | ' || c2
FROM (SELECT c1, c2, ROW_NUMBER() OVER (PARTITION BY c1 ORDER BY c2) rn
FROM your_table);
答案 1 :(得分:3)
如果您使用的是sqlplus,则可以使用BREAK ON
:
SQL> desc tab1;
Name Null? Type
----------------------------------------- -------- ----------------------------
COL VARCHAR2(1)
COL2 NUMBER
SQL> select * from tab1;
C COL2
- ----------
A 1
A 2
B 1
B 2
B 3
SQL> break on col;
SQL> select * from tab1;
C COL2
- ----------
A 1
2
B 1
2
3
SQL>
更多详情here。
答案 2 :(得分:2)
我依稀记得有一种方法可以在SQL PLus中获得这种格式。 另一种可能的方式如下:
SELECT a.COLUMN_1,
CASE
WHEN a.rnk = 1 THEN a.COLUMN_2
ELSE NULL
END AS COLUMN_2
FROM (
SELECT a.*,
RANK() OVER(PARTITION BY COLUMN_1 ORDER BY COLUMN2) rnk
FROM <YOUR_TABLE> a
) a
答案 3 :(得分:1)
此演示文稿要求最适合用于显示结果的应用程序,而不是原始SQL。您可以使用光标满足您的要求,但这不是一个非常优雅的解决方案。
答案 4 :(得分:1)
这更像是一个格式化问题,最好用你用来显示输出的任何东西来解决。查询结果没有错,作为查询结果。
答案 5 :(得分:1)
,查看LEAD
和LAG
函数。
您可以查看上一行,如果它与当前行相同,请将值更改为NULL。