Во-первых, мне нужно поблагодарить Кент Миллиган и его статью в http://www.mcpressonline.com/sql/techtip-combining-multiple-row-values-into-a-single-row-with-sql-in-db2-for-i.html за то, что у меня есть такая проблема, как у меня. Но теперь мне нужно расширить то, что он сделал здесь.Совпадение нескольких значений строк в 1 строку, с SQL для iSeries
Чтобы избежать необходимости переходить к его статье, проблема, с которой он обращался, заключалась в объединении строковых данных из нескольких строк в одну строку в результирующей таблице. Например:
Таблица Автомобили:
- Марка Модель
- Ford Fusion
- Chevy Tahoe
- Honda Odyssey
- Ford Taurus
- Ford Focus
- Chevy Malibu
Результаты:
- Марка Модель
- Chevy Malibu, Tahoe
- Ford Focus, Taurus, Fusion
- Honda Odyssey
Это было сделано с утверждением SQL:
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
- Chevy SUV Tahoe
- Honda минивэн Odyssey
- Форд седан Taurus
- Форд Седан Фокус
- Chevy Sedan Malibu
- Форд внедорожник избежать
- Форд внедорожник Проводник
- Chevy Impala Sedan
за результаты, я бы искал:
- Марка Тип Модель
- Chevy Malibu седан , Импала
- Chevy SUV Tahoe
- Форд седан Fusion, Taurus, Focus
- Форд внедорожник Escape, Explorer,
- Honda минивэн Odyssey
Кто-нибудь есть какие-либо мысли о том, что все, что мне нужно добавить в первоначальное заявление, чтобы иметь возможность добавить TYPE и GROUP соответственно? Я пробовал несколько вещей, но я подозреваю, что мне нужно что-то сделать с утверждением CONNECT_BY_PATH, я просто не уверен, что.
Спасибо
Благодарим за предложение. Я думал, что что-то подобное может сработать, но это не так. То, что я закончил, было: Chevy SUV Tahoe; Чеви Седан Тахо, Малибу, Импала; Внедорожник Ford, Explorer; Ford Sedan Escape, Explorer, Fusion, Телец, Фокус. Похоже, что он разбивается на Type, но когда он делает соединение, он добавляет все результаты. – Andrew
Это странно, потому что в соединении я добавил тип = предыдущий тип. так что он будет пересекать соединение только по типу и типу. поэтому должны быть подключены только модели для одного и того же типа/типа. – xQbert
Ahh, ну, я пропустил ваше дополнение к линии CONNECT BY, поэтому у меня была проблема, которую я видел (извините за это). Я добавил, что все еще есть проблема. Теперь я получаю только 1 строку для каждого Make. Chevy SUV Tahoe; Внедорожник Ford, Explorer. – Andrew