oracle 根据数据中的相关行在我的视图中派生列值

4bbkushb  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(102)

我已经创建了一个视图,该视图基于一组具有卡车车轴/轮胎配置的数据,它表示有关卡车配置、车轴和位置(即轮胎位置)的信息。
| 网站|卡车|卡车上的车轴|POSNUM|位置_同义词|轴|轴上位置| * 预期_方案 *|
| --|--|--|--|--|--|--|--|
| 卡尔加里|HAUL1| 2 | 1 |LF| 1 | 2 |2x4|
| 卡尔加里|HAUL1| 2 | 2 |RF| 1 | 2 |2x4|
| 卡尔加里|HAUL1| 2 | 3 |LRO| 2 | 4 |2x4|
| 卡尔加里|HAUL1| 2 | 4 |LRI| 2 | 4 |2x4|
| 卡尔加里|HAUL1| 2 | 5 |RRI| 2 | 4 |2x4|
| 卡尔加里|HAUL1| 2 | 6 |RRO| 2 | 4 |2x4|
数据中的每一行是轮胎位置。数据中的几行与每个卡车配置相关。我试图推导出,对于每个轮胎位置,母卡车的整体“模式”。也就是说,卡车是一个2x2 x2与3轴和2轮胎上的每一个?或者是2x 4,有2个车轴,2个轮胎在前面,4个在后面?或者它是一个14轮胎跨运车,2x 4x 4x 4,与2个轮胎的前面,和4个轮胎的其他3个车轴?
我熟悉一些窗口/分析函数语法,如RANK() OVER (PARTITION BY... ORDER BY...)COUNT(DISTINCT xyz) OVER(...),但我就是不能理解这些。
卡车的 “预期模式” 是每个车轴的轮胎计数(POS_COUNT_ON_AXLE),其中“x”作为分隔符。通过忽略分隔符来简化,我无法理解如何在数据中的6行中为2x 4(后部双)卡车生成24。
最终目标是我应该能够从视图WHERE SITE='CALGARY' AND TRUCK='HAUL1' AND POSNUM=3中进行选择,并看到位置同义词是'LRO',卡车的模式是'2x 4'。
小提琴:http://sqlfiddle.com/#!4/ef1a9/1

v9tzhpje

v9tzhpje1#

你可以先使用MIN,然后再使用LISTAGG解析函数:

SELECT SITE,
       TRUCK,
       AXLE_COUNT_ON_TRUCK,
       POSNUM,
       POS_SYNONYM,
       AXLE,
       POS_COUNT_ON_AXLE,
       EXPECTED_SCHEMA,
       LISTAGG(schema, 'x')
         WITHIN GROUP(ORDER BY axle)
         OVER (PARTITION BY site, truck) AS schema
FROM   (
  SELECT t.*,
         CASE
         WHEN posnum = MIN(posnum) OVER (PARTITION BY site, truck, axle)
         THEN pos_count_on_axle
         END AS schema
  FROM   Table1 t
)

对于样本数据,其输出:
| 网站|卡车|卡车上的车轴|POSNUM|位置_同义词|轴|轴上位置|预期_SCHEMA|模式|
| --|--|--|--|--|--|--|--|--|
| 卡尔加里|HAUL1| 2 | 1 |LF| 1 | 2 |2x4| 2x4|
| 卡尔加里|HAUL1| 2 | 2 |RF| 1 | 2 |2x4| 2x4|
| 卡尔加里|HAUL1| 2 | 5 |RRI| 2 | 4 |2x4| 2x4|
| 卡尔加里|HAUL1| 2 | 4 |LRI| 2 | 4 |2x4| 2x4|
| 卡尔加里|HAUL1| 2 | 3 |LRO| 2 | 4 |2x4| 2x4|
| 卡尔加里|HAUL1| 2 | 6 |RRO| 2 | 4 |2x4| 2x4|
| 卡尔加里|HUL8| 4 | 1 |LF| 1 | 2 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 2 |RF| 1 | 2 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 3 |LMO| 2 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 4 |LMI| 2 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 5 |RMI| 2 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 6 |RMO| 2 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 7 |LMO| 3 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 10 |RMO| 3 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 9 |RMI| 3 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 8 |LMI| 3 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 11 |LRO| 4 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 12 |LRI| 4 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 13 |RRI| 4 | 4 |2x4x4x4| 2x4x4x4|
| 卡尔加里|HUL8| 4 | 14 |RRO| 4 | 4 |2x4x4x4| 2x4x4x4|
| 迈阿密|HAUL1| 3 | 1 |LF| 1 | 2 |2x2x2| 2x2x2|
| 迈阿密|HAUL1| 3 | 2 |RF| 1 | 2 |2x2x2| 2x2x2|
| 迈阿密|HAUL1| 3 | 4 |RM| 2 | 2 |2x2x2| 2x2x2|
| 迈阿密|HAUL1| 3 | 3 |LM| 2 | 2 |2x2x2| 2x2x2|
| 迈阿密|HAUL1| 3 | 5 |LR| 3 | 2 |2x2x2| 2x2x2|
| 迈阿密|HAUL1| 3 | 6 |RR| 3 | 2 |2x2x2| 2x2x2|
fiddle

相关问题