使用SQL for iSeries将多个行值连接到一行中
首先,我要感谢肯特·米利根和他的文章,感谢他让我在这个问题上走得这么远。但现在我需要进一步阐述他在这里所做的工作 为了避免阅读他的文章,他解决的问题是将多行中的字符串数据连接到结果表中的一行中。例如: 桌车:使用SQL for iSeries将多个行值连接到一行中,sql,ibm-midrange,iseries-navigator,Sql,Ibm Midrange,Iseries Navigator,首先,我要感谢肯特·米利根和他的文章,感谢他让我在这个问题上走得这么远。但现在我需要进一步阐述他在这里所做的工作 为了避免阅读他的文章,他解决的问题是将多行中的字符串数据连接到结果表中的一行中。例如: 桌车: 制作模型 福特Fusion 雪佛兰塔霍 本田奥德赛 福特金牛座 福特福克斯 雪佛兰马里布 结果: 制作模型 塔霍岛马里布雪佛兰 福特福克斯、金牛座、Fusion 本田奥德赛 这是通过SQL语句完成的: WITH numbered_sets(make, model, curr, pr
- 制作模型
- 福特Fusion
- 雪佛兰塔霍
- 本田奥德赛
- 福特金牛座
- 福特福克斯
- 雪佛兰马里布
- 制作模型
- 塔霍岛马里布雪佛兰
- 福特福克斯、金牛座、Fusion
- 本田奥德赛
WITH numbered_sets(make, model, curr, prev) AS (
SELECT make, model,
ROW_NUMBER() OVER (PARTITION BY make ORDER BY model) AS curr,
ROW_NUMBER() OVER (PARTITION BY make ORDER BY model) -1 AS prev
FROM inventory)
SELECT make,
MAX (TRIM(L ',' FROM
CAST(SYS_CONNECT_BY_PATH(model, ',') AS VARCHAR(256)) ))
FROM numbered_sets
START WITH curr = 1
CONNECT BY make = PRIOR make AND prev = PRIOR curr
GROUP BY make
我能够将它适应我自己的桌子,并得到我想要得到的大部分方式。但出于我的目的,我需要为分组添加一个额外的列。例如:
桌车:
- 制作类型模型
- 福特轿车Fusion
- 雪佛兰SUV塔霍
- 本田迷你奥德赛
- 福特轿车金牛座
- 福特轿车焦点
- 马里布雪佛兰轿车
- 福特SUV逃生车
- 福特SUV探索者
- 雪佛兰轿车黑斑羚
- 制作类型模型
- 雪佛兰轿车马里布,黑斑羚
- 雪佛兰SUV塔霍
- 福特轿车Fusion、金牛座、福克斯
- 福特SUV逃生车,探险家
- 本田迷你奥德赛
谢谢你我认为你只需要在正确的点上集成类型,而不必考虑查询 如果无法进行测试,我认为这将非常接近;但我可能错过了什么
WITH numbered_sets(make, type, model, curr, prev) AS (
SELECT make, type, model,
ROW_NUMBER() OVER (PARTITION BY make, Type ORDER BY Make, Type, model) AS curr,
ROW_NUMBER() OVER (PARTITION BY make, type ORDER BY Make, type, model) -1 AS prev
FROM inventory)
SELECT make, Type
MAX (TRIM(L ',' FROM
CAST(SYS_CONNECT_BY_PATH(model, ',') AS VARCHAR(256)) ))
FROM numbered_sets
START WITH curr = 1
CONNECT BY make = PRIOR make AND prev = PRIOR curr and type = prior type
GROUP BY make, type
也许我们需要在连接之前更改连接方式以进行连接。。。虽然我不明白为什么这会有帮助
CONNECT BY concat(make,type) = PRIOR concat(make,type) AND prev = PRIOR curr
谢谢你的建议。我原以为那样可能行得通,但行不通。我最终得到的是:雪佛兰SUV Tahoe;雪佛兰轿车塔霍,马里布,黑斑羚;福特SUV逃逸,探险家;福特轿车逃逸,探险家,融合,金牛座,焦点。它似乎在类型上中断,但当它进行连接时,它正在添加所有结果。这很奇怪,因为在connectby I added Type=previor Type中。这样它就只能通过make和type遍历连接。因此,应该只连接相同品牌/类型的型号。啊,好吧,我错过了您添加到“连接方式”中的内容,这就是我遇到问题的原因(很抱歉)。我现在已经补充了这一点,但仍然有一个问题。现在,我只得到一条线,每一个品牌。雪佛兰SUV塔霍;福特SUV Escape,探险家。我一定不明白这个问题,我想这就是你想要的结果:就像品牌/类型组合在一行,型号逗号分隔后为同一品牌/类型。很高兴为您服务。如果我的解决方案与您最终的解决方案不匹配,我建议发布您的最终解决方案,并接受该解决方案作为答案,然后简单地将我的投票选为“帮助”。如果这对将来的人有帮助,我宁愿引导人们进行正确的活动。