首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不同行中检索组合作为输入SQL

从不同行中检索组合作为输入SQL
EN

Stack Overflow用户
提问于 2018-06-25 10:38:52
回答 3查看 116关注 0票数 3

我是SQL的新手,对一个问题有点纠结。我有一张桌子,结构如下...表格格式是我不能更改的。我尝试过内部连接和交叉连接,但这对我没有太大帮助。

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

我应该只检索芝加哥或轿车或冷或芝加哥和轿车或芝加哥和冷等等的组合。例如,在下面的表中,ID 4不应该被检索,因为它是纽约和chilly的组合。

任何帮助都将不胜感激。

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2018-06-28 22:54:51

赛,

你可以试一试,看看这是不是你想要的。

我确实在原来的示例表中添加了一行,只是为了帮助演示如何呈现该SQL。

代码语言:javascript
复制
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将使您的表输出呈现为更易于管理的格式。

代码语言:javascript
复制
    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

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

代码语言:javascript
复制
ID CITY             CAR     WEATHER
1  Chicago,Dallas   SEDAN   CHILLY
2  (null)           SEDAN   CHILLY
3  Chicago          (null)  (null)
4  New York         SEDAN   (null)

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

代码语言:javascript
复制
    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

然后,这将呈现为

代码语言:javascript
复制
ID    CITY                CAR      WEATHER
1     'Chicago','Dallas'  'SEDAN'  'CHILLY'
2     (null)              'SEDAN'  'CHILLY'
3     'Chicago'           (null)   (null)
4     'New York'          'SEDAN'  (null)

这是你想要的更多吗?

票数 1
EN

Stack Overflow用户

发布于 2018-06-25 10:42:04

您可以使用group byhaving

代码语言:javascript
复制
select id
from t
group by id
having sum(case when code in ('Chicago', 'Sedan', 'chilly') then 1 else 0 end) = count(*);

也许你打算:

代码语言:javascript
复制
having sum(case when type = 'City' and code <> 'Chicago' then 1 else 0 end) = 0 and
       sum(case when type = 'Car' and code <> 'Sedan' then 1 else 0 end) = 0 and
       sum(case when type = 'Weather' and code <> 'Chilly' then 1 else 0 end) = 0 
票数 0
EN

Stack Overflow用户

发布于 2018-06-25 11:01:22

戈登查询的略微扩展

代码语言:javascript
复制
SELECT * FROM TABLE1 t1
WHERE t1.ID IN 
(SELECT ID
FROM TABLE1 t2
GROUP BY ID
HAVING 
    SUM(CASE WHEN CODE IN ('Chicago','SEDAN','CHILLY')
           THEN 1 ELSE 0 END) 
    = COUNT(*)
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51015648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档