sql - 取消嵌套重复字段时在某列上设置不同的值
问题描述
我有下表:
| Id | Services | Value | Type |
-------------------------------------------------
| 1 | ['One', 'Two', 'Three'] | 30 | A |
| 2 | ['One', 'Two'] | 20 | A |
| 3 | ['One'] | 40 | B |
我需要一个取消嵌套字段Services
并Value
仅保留未嵌套的第一个元素的查询(哪个元素获取值并不重要,但我只需要一次)。
结果将是这样的:
| Id | Services | Value | Type |
--------------------------------
| 1 | 'One' | 30 | A |
| 1 | 'Two' | 0 | A |
| 1 | 'Three' | 0 | A |
| 2 | 'One' | 20 | A |
| 2 | 'Two' | 0 | A |
| 3 | 'One' | 40 | B |
我正在使用标准 SQL。
解决方案
关键是使用WITH OFFSET
子句,看下面的查询
WITH Test AS (
SELECT 1 Id, ['One', 'Two', 'Three'] Services, 30 Value, 'A' Type UNION ALL
SELECT 2, ['One', 'Two'], 20, 'A' UNION ALL
SELECT 3, ['One'], 40, 'B'
) SELECT Id, Service, IF(offset = 0, Value, 0) Value, Type
FROM Test, UNNEST(Services) Service WITH OFFSET AS offset
推荐阅读
- angular6 - Angular 无法读取“未定义”的值 - 无法在 setTitle() 方法中读取“casestudy”的值?
- javascript - Stripe 是否可以根据用户的位置(国家)动态显示货币?
- css - 如果屏幕足够宽并且在彼此下方,如何自动将画布放在桌子旁边?
- r - 如何在不添加日期的情况下将 chr 转换为时间?
- asp.net-core - MassTransit 5.2,SignalR:如何在我的消费者中获取 IHubContext?
- neo4j - Prolog 的 Neo4j 推理替代方案
- encoding - FFMPEG 直通记录 RTSP/H264 到 MP4 容器编码错误
- javascript - Sequelize hasMany 包含返回对象而不是数组
- android - Flutter 上的 json 解析错误。键入'_InternalLinkedHashMap
' 不是类型转换中类型 'ResultData' 的子类型 - mongodb - 从文档中查找元素