日期:2014-05-16  浏览次数:20742 次

这个SQL如何写呢?
各位高手请赐教;

有一个表Pen 有二列:
ID    Name

1     钢笔
3     水笔
4     圆珠笔


另个颜色 表Color  有二列
ID      COLOR1    COLOR2

1       红色      黑色
4       黄色      红色

现在想根据同一个笔不同的颜色列成一行行,如上面的就能列成:
Name    color
钢笔    红色
钢笔    黑色
圆珠笔  黄色
圆珠笔  红色

求各位在侠这个SQL如何写?十分感谢您的帮助!

------最佳解决方案--------------------

select Name,color from 
(select Name,COLOR1 color,1 col 
from Pen,Color
where Pen.ID=Color.ID
union all
select Name,COLOR2,2
from Pen,Color
where Pen.ID=Color.ID) 
order by Name desc,col;

------其他解决方案--------------------
create table t1 (id number,name VARCHAR2(10));
create table t2 (id number,color1 varchar2(10),color2 varchar(10));
insert into t1 values(1,'钢笔');
insert into t1 values(3,'水笔');
insert into t1 values(4,'圆珠笔');
insert into t2 values(1 ,'红色','黑色');
insert into t2 values(4,'黄色','红色');

select t1.name,t.color from t1,
(
select id,color1 as color from T2
UNION 
select id,color2 from t2) t where t1.id=t.id;

drop table t1;
drop table t2;
结果显示:
NAME       COLOR      
---------- ---------- 
钢笔       黑色       
钢笔       红色       
圆珠笔     红色       
圆珠笔     黄色       

4 rows selected

------其他解决方案--------------------
只有2种颜色吗
直接union all

select Pen,COLOR1  color from Pen a,Color  b where a.id=b.id
union all
select Pen,COLOR2  color from Pen a,Color  b where a.id=b.id
;
------其他解决方案--------------------
数据库环境输不了中文,用拼音来表示好了..
WITH pen AS(
SELECT '1'id,'gang bi'NAME FROM dual
UNION ALL 
SELECT '3','shui bi' FROM dual
UNION ALL 
SELECT '4','yuan zhu bi' FROM dual
),
color AS(
SELECT '1'id,'hong se'color1,'hei se'color2 FROM dual
UNION ALL 
SELECT '4','huang se','hong se' FROM dual
)
select pen.NAME,color.color1,color.color2 FROM pen,color WHERE pen.id=color.id

------其他解决方案--------------------
哦,看错了,入楼上做法即可。
------其他解决方案--------------------
真的感情各位高手的出手相助,小菜感谢不尽!只是颜色有好几十种,有没有别的方法呢?