首页 > 解决方案 > SQL 从一个条目中选择两列

问题描述

如何在条目末尾使用正则表达式从一列中查询两列?

表图像:

IMAGE_NAME         IMAGE_ID
---------------------------
image01_01.png     0
image01_02.png     1
image02_01.png     2
image02_02.png     3
select
    IMAGE_NAME,
    IMAGE_ID,
    <img src="https://my_page?im_id='||IMAGE_ID||'" class="test" height="50" width="200">' IMAGE
from 
    IMAGES
where 
    IMAGE_NAME like '%01.png'

显示以图像名称结尾的 01.png 的所有图像。此外,我需要第二列显示所有以图像名称结尾的 02.png 图像。

如何实现此查询以获取两列?

编辑:我想在 Apex 的交互式报告中显示两个图像列。

编辑#2:显示带有 img 标签的图像时变得更加复杂。

预期的列结果应该是可以在 Apex 中显示的 html 图像对象:

https://my_page?im_id=0

Suffix_01       | Suffix_02       | Link to image_01       | Link to image_02
----------------+-----------------+------------------------+-----------------
image02_01.png  | image02_02.png  |https://my_page?im_id=2 | https://my_page?im_id=3
image01_01.png  | image01_02.png  |https://my_page?im_id=0 |https://my_page?im_id=1

标签: sqloracleoracle-apex

解决方案


假设您想要一个具有相同前缀的单行图像名称的表。您可以对其使用条件聚合:

SELECT 
    t.suffix01, 
    t.suffix02, 
    'https://my_page?im_id=' || i1.image_id "Link to image_01", 
    'https://my_page?im_id=' || i2.image_id "Link to image_02"
FROM
    (SELECT 
         MAX(CASE WHEN Image_name like '%01.png' THEN Image_name END) suffix01,
         MAX(CASE WHEN Image_name like '%02.png' THEN Image_name END) suffix02
     FROM 
         Images
     GROUP BY 
         SUBSTR(image_name, 1, LENGTH(image_name) - 6)) t 
JOIN 
    images i1 ON i1.image_name = t.suffix01
JOIN  
    images i2 ON i2.image_name = t.suffix02

演示

结果:

suffix01        | suffix02        | Link to image_01        | Link to image_02
----------------+-----------------+-------------------------+------------------
image02_01.png  | image02_02.png  | https://my_page?im_id=2 | https://my_page?im_id=3
image01_01.png  | image01_02.png  | https://my_page?im_id=0 |https://my_page?im_id=1

推荐阅读