【问题标题】:SQL statement - get multiple values in one columnSQL 语句 - 在一列中获取多个值
【发布时间】:2019-07-18 06:45:13
【问题描述】:

我有一个包含如下数据的表格:

  id | name | value

    12 | KREA | 3,7 

    13 | KREA | 12.6

    12 | GFR  | 2.2

    13 | GFR  | 1.7

现在我想在一列中获取 krea 和 gfr 的名称和值,如下所示:

 id | name1 | value1 | name2 | value2

    12 | KREA  | 3.7    | GFR   | 2.2

...

我尝试加入,但没有成功。

select rps1.id, rps1.name, rps1.value, rps2.id, rps2.name, rps2.value 
  from table1 rps1, table1 rps2 
 where rps1.name like 'KREA' 
    or rps2.name like 'GRFR' and rps1.id = rps2.id
   and crd > '17.07.2019 00:00:00' order by id

谁能告诉我我做错了什么?提前致谢! :)

【问题讨论】:

  • 哪个 RDBMS?哦,请停止使用隐式连接 ... From t1, t2 ...
  • 这是一个 oracle 数据库

标签: sql database oracle subquery


【解决方案1】:

使用这个。

select
  t1.id,
  t1.name,
  t1.value,
  t2.id,
  t2.name,
  t2.value
from
  (select id, name, value from table1 where name='KREA' and crd > '17.07.2019 00:00:00') t1
join
  (select id, name, value from table1 where name='GFR' and crd > '17.07.2019 00:00:00') t2
        on t1.id = t2.id
order by
  t1.id

【讨论】:

    【解决方案2】:

    除了一些错误之外,您尝试的查询非常好。

    rps1.name like 'KREA' 
        or rps2.name like 'GRFR' 
    --> need to use AND instead of OR
    --> need to use 'GFR' instead of 'GRFR' 
    
    order by id
    --> Need to use alias rps1.id
    

    -- 所以你的查询会是这样的:

    select rps1.id, rps1.name, rps1.value, rps2.id, rps2.name, rps2.value 
      from table1 rps1, table1 rps2 
     where rps1.name like 'KREA' 
        AND rps2.name like 'GFR' and rps1.id = rps2.id
       and crd > '17.07.2019 00:00:00' 
       order by rps1.id
    

    db<>fiddle demo

    干杯!!

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多