论坛上看到有位朋友问到 一行变两行的问题,当然解法不仅一种,这里简单记录一下。
帖子地址:
http://www.itpub.net/thread-1513738-1-1.html那位朋友的问题:--------------------------------
求一行变成两行的sql
名字 分类 数量
A x 10
B y 20
C x 30
C y 40
要生成这样的效果:
名字 分类 数量
A x 10
A y
B x
B y 20
C x 30
C y 40
请各位帮帮忙,多谢!
--------------------------------
高手们给出的 使用分区连接 的解法---------------------------------
WITH t AS
(SELECT 'A' a, 'x' b, 10 c FROM dual
UNION ALL
SELECT 'B', 'y', 20 FROM dual
UNION ALL
SELECT 'C', 'x', 30 FROM dual
UNION ALL
SELECT 'C', 'y', 40 FROM dual),
t1 AS(SELECT DISTINCT b FROM t)
SELECT t.a, t1.b, t.c
FROM t PARTITION BY (t.a)
RIGHT OUTER JOIN t1
ON (t.b = t1.b)
ORDER BY 1,2
---------------------------------
我也凑了个热闹,写了一种比较笨的方法:---------------------------------
我也来凑个热闹
SQL> create table TEST
2 (
3 NAME VARCHAR2(10),
4 TYPE VARCHAR2(10),
5 QTY VARCHAR2(10)
6 );
Table created
SQL> insert into TEST (NAME, TYPE, QTY) values ('C', 'X', '30');
1 row inserted
SQL> insert into TEST (NAME, TYPE, QTY) values ('B', 'Y', '20');
1 row inserted
SQL> insert into TEST (NAME, TYPE, QTY) values ('A', 'X', '10');
1 row inserted
SQL> insert into TEST (NAME, TYPE, QTY) values ('C', 'Y', '40');
1 row inserted
SQL> commit;
Commit complete
SQL> with
2 t1 as
3 (select distinct name from test ) ,
4 t2 as
5 (select distinct type from test),
6 t3 as
7 (select name,type from t1,t2 order by 1,2 )
8 select t3.name,t3.type,t.qty from t3,test t
9 where t3.name=t.name (+)
10 and t3.type=t.type (+)
11 order by 1,2,3;
NAME TYPE QTY
---------- ---------- ----------
A X 10
A Y
B X
B Y 20
C X 30
C Y 40
6 rows selected
SQL>
--------------------------------
以上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20335819/viewspace-711785/
,如需转载,请注明出处,否则将追究法律责任。