首页 > 解决方案 > 从不同的行检索组合作为输入 SQL

问题描述

我是 SQL 新手,我有点被困在一个问题上。我有一个具有以下结构的表格...表格格式是我无法更改的。我已经尝试过 INNER joins 和 cross join 但这对我没有多大帮助。

我必须检索取决于我输入的所有记录,例如,如果我的输入是芝加哥、轿车和寒冷。

我应该只检索 Chicago 或 Sedan 或 Chilly 或 Chicago 和 Sedan 或 Chicago 和 chilly 等的组合......例如,在下表中 ID 4 不应该被检索,因为它是 new york 和 chilly 的组合。

任何帮助将不胜感激。

ID  TYPE    CODE
1   CITY    Chicago
1   CAR     SEDAN
1   WEATHER CHILLY
2   WEATHER CHILLY
2   CAR     SEDAN
3   CITY    Chicago
4   CITY    New York
4   CAR SEDAN

表格格式

标签: sqloracleoracle11g

解决方案


赛,

您可以尝试一下,看看这是否是您所追求的。

我确实在您的原始示例表中添加了一行,只是为了帮助说明此 SQL 将如何呈现。

ID  TYPE    CODE
1   CITY    Chicago
1   CITY    Dallas
1   CAR     SEDAN
1   WEATHER CHILLY
2   WEATHER CHILLY
2   CAR     SEDAN
3   CITY    Chicago
4   CITY    New York
4   CAR SEDAN

使用此 SQL 将使您的表输出是一种更易于管理的格式。

    SELECT * FROM 
((select id, type, code from   TABLE1 t1)
 pivot (listagg(code,',') within group (order by type) 
        for type in('CITY' as CITY,'CAR' as CAR, 'WEATHER' as WEATHER)))
 order by id

这会将上面的表格格式转换为以下格式化的记录集。

ID CITY             CAR     WEATHER
1  Chicago,Dallas   SEDAN   CHILLY
2  (null)           SEDAN   CHILLY
3  Chicago          (null)  (null)
4  New York         SEDAN   (null)

当然,如果您希望在输出中的每个项目周围加上引号,您可以这样做。

    SELECT * FROM 
((select id, type, code from   TABLE1 t1)
 pivot (listagg(''''||code||'''',',') within group (order by type) 
        for type in('CITY' as CITY,'CAR' as CAR, 'WEATHER' as WEATHER)))
 order by id

然后这将呈现为

ID    CITY                CAR      WEATHER
1     'Chicago','Dallas'  'SEDAN'  'CHILLY'
2     (null)              'SEDAN'  'CHILLY'
3     'Chicago'           (null)   (null)
4     'New York'          'SEDAN'  (null)

这更符合您的要求吗?


推荐阅读