sql - 从不同的行检索组合作为输入 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
解决方案
赛,
您可以尝试一下,看看这是否是您所追求的。
我确实在您的原始示例表中添加了一行,只是为了帮助说明此 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)
这更符合您的要求吗?
推荐阅读
- jquery - Laravel 中的 jQuery/AJAX 多文件上传
- sql - 从宏查询(加入)外部工作簿
- jquery - 我可以将 Ajax 与 asp.net 4.5 .NET Framework FileUpload 控件一起使用来上传多个文件吗?
- javascript - 仅从 firebase 实时数据库中获取当前用户数据
- dynamics-crm - 计算与该特定公司相关的每个人的其他关系
- testing - 跨多个内核测试内核模块
- excel - 如果超过 1 个选项,则自动填充/带有数据验证的下拉列表
- lua - 最后在lua中重写表
- c++ - c++ bad_alloc 异常没有被捕获
- node.js - 猫鼬储蓄