0

你好我在这里需要帮助...

我的查询显示以下结果:

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')
4

3 回答 3

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 等(此处

于 2013-09-24T02:02:38.450 回答
0

让我重新定义这个问题 - 它是 oracle .. 这一切都来自同一张表 颜色也... SELECT tabble1.ID, table1.NAME, table1.COLOR,table1.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')

于 2013-09-26T15:13:47.790 回答
0

你的数据库类型有点到处都是......是mysql还是oracle?无论如何,我通过您的 select 语句猜测 oracle。我使用的是基于 'join' 的语法,我发现它比这里的更容易阅读。使用版本 1 的 select 语句并将其左连接到具有版本 2 的 select 语句。如果有版本 3,请在其中放置另一个 join。

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)

于 2013-09-23T16:37:54.290 回答