您好我需要帮助......
我的查询显示以下结果:
Id name color Version
1 leather black 1
1 leather brown 2
2 suede brown 1
3 cloth green 1
3 cloth blue 2
我想显示以下内容:
Id name color Color_2
1 leather black brown
2 suede brown
3 cloth green blue
查询很简单 目前
SELECT ID, NAME, COLOR,VERSION
FROM table1,table2
WHERE table1.ID = table2.ID
AND id in
(SELECT ID
FROM table1,table2
WHERE table1.ID = table2.ID
AND VERSION in ('1'))
AND VERSION in ('1','2')
答案 0 :(得分:1)
一个简单的(如果你在设计时知道你可能拥有的最大颜色数)
drop table my_test;
create table my_test (
id number,
name varchar2(32),
color varchar2(32),
version number);
insert into my_test values(1,'leather','black',1);
insert into my_test values(1,'leather','brown',2);
insert into my_test values(2,'suede','brown',1);
insert into my_test values(3,'cloth','green',1);
insert into my_test values(3,'cloth','blue ',2);
set linesize 200
select min(id) id,
name,
max(decode(version,1,color,null)) color,
max(decode(version,2,color,null)) color_2
from my_test
group by name
order by 1;
ID NAME COLOR COLOR_2
---------- ---------- ---------- ----------
1 leather black brown
2 suede brown
3 cloth green blue
3 rows selected.
这适用于任何Oracle数据库版本。根据您使用的版本,查看LISTAGG,WM_CONCAT等(here)
答案 1 :(得分:0)
你的数据库类型到处都是...它是mysql还是oracle?无论如何,我正在通过你的select语句猜测oracle。我正在使用基于'join'的语法,我觉得它比你在这里阅读起来更容易。使用版本1的select语句并将其连接到版本为2的select语句。如果版本为3,则在其中添加另一个联接。
select a.id, a.name, a.colour, b.colour
from (select * from table1 where version = 1) a
left join (select * from table1 where version = 2) b
on a.id = b.id
(假设版本1始终存在,并且没有版本1的版本2)
答案 2 :(得分:0)
让我重新构思这个问题 - 它是oracle ..它来自同一个表格的颜色也是... SELECT tabble1.ID,table1.NAME,table1.COLOR,table1.VERSION
FROM table1,table2
WHERE table1.ID = table2.ID
和id在
(选择ID
FROM table1,table2
table1.ID = table2.ID
和'版本'('1'))
和'版本'('1','2')