Слить две записи в одну несколькими способами | |
---|---|
tata Автор Сообщений: 3476 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Есть select.
Есть картинка с результатом его работы. Две верхних записи (для примера) абсолютно одинаковые, отличаются только датами в разных полях. Их нужно слить в одну запись. Я для этого использовала Max(Data) и группировку. Шеф утверждает, что существуют как минимум 2 варианта слияния без Max и без группировки. Что-то ничего в голову не приходит. Подскажите! Не дает вставлять картинки > 50. Objectid || Date1 || Date2 || Date3 || Date4 ================================================================================================================================ 002be6d2-97e7-4d2c-8caa-cdcbf3347fc7 || 2022-11-15 || 2022-11-30 || NULL || NULL 002be6d2-97e7-4d2c-8caa-cdcbf3347fc7 || NULL || NULL || 2022-12-01 || 2022-12-30 Исправлено 10 раз(а). Последнее : Joys, 28.06.22 11:11 |
Re: Слить две записи в одну несколькими способами | |
---|---|
PaulWist Сообщений: 14693 Дата регистрации: 01.04.2004 |
А так?
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 2 раз(а). Последнее : PaulWist, 27.06.22 21:57 |
Re: Слить две записи в одну несколькими способами | |
---|---|
tata Автор Сообщений: 3476 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Только так пока.
CREATE OR REPLACE FUNCTION roadmap.upload_real(p_year integer) RETURNS TABLE(classifierfederalcode character varying, rgisid character varying, necessityid character varying, planstartreg date, planendreg date, transtart date, transend date) LANGUAGE plpgsql AS $function$ begin RETURN query select s.classifierfederalcode, -- o.name, o.rgisid, -- o.id as objectid, -- s.id as actionid, m.necessityid, -- lin.procedireid, MAX(case when p.baseprocedureid = '0f1677ea-3ad9-4316-8fd5-6f597747a3f2' then lin.planstartdate::date end) as planstartreg, max(case When p.baseprocedureid = '0f1677ea-3ad9-4316-8fd5-6f597747a3f2' then lin.deadline::date end) as planendreg, max(Case When p.baseprocedureid = 'fd0b8f4f-0a19-49e8-8a52-34cbb840d38e' Then lin.planstartdate::date end) as transtart, max(Case When p.baseprocedureid = 'fd0b8f4f-0a19-49e8-8a52-34cbb840d38e' Then lin.deadline::date end) as transend FROM get_last_approved_gp(p_year) r JOIN mmobjectsubprogramaction m ON r.versionid=m.versionid AND m.isdelete =FALSE JOIN roadmap.linkobjecttoprocedure lin ON lin.subprogramactionid =m.subprogramactionid AND m.objectid =lin.objectid JOIN get_last_dk(p_year) d ON d.versionid =lin.roadmapversionid inner join subprogramaction s on m.subprogramactionid = s.id inner join object o on m.objectid = o.id inner join roadmap.procedure p on lin.procedureid = p.id and (p.baseprocedureid = '0f1677ea-3ad9-4316-8fd5-6f597747a3f2' or p.baseprocedureid = 'fd0b8f4f-0a19-49e8-8a52-34cbb840d38e') where 1 = 1 and lin.isdelete = false group by o.id, s.id, m.necessityid order by 1, 2,3, 4 desc; END; $function$ ; ; |
Re: Слить две записи в одну несколькими способами | |
---|---|
PaulWist Сообщений: 14693 Дата регистрации: 01.04.2004 |
Нуу, max просто спрятан в ф-ию. Не выход
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Слить две записи в одну несколькими способами | |
---|---|
Владимир Максимов Сообщений: 14123 Откуда: Москва Дата регистрации: 02.09.2000 |
Если в рамках FoxPro или SQL, то, в общем случае, шеф бессовестно врёт
Чтобы исключить группировку необходимо делать отдельные выборки по уникальным значениям. Причем первая выборка по первой записи, вторая - по второй. Потом через Left Join объединять. Это существенно сложнее, чем группировка Но судя по синтаксису, это вообще не FoxPro. Возможно, в этом языке есть какие-то свои "фичи" Нет, ну можно пронумеровать (ROW_NUMBER) выборки, потом отбирать по номерам. Но, повторюсь, это существенно сложнее обычной группировки Т.е. идея вот такая
Вопрос только в том, как "вычислить" значение "Номер_строки", чтобы "развести" строки по разным выборкам. Возможно, в таблицах это есть, просто не показано в примере. Тогда шеф прав. Но, в общем случае, это сделать сложнее. |
Re: Слить две записи в одну несколькими способами | |
---|---|
tata Автор Сообщений: 3476 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Так это та, что работает уже.
А еще 2 надо. |
© 2000-2024 Fox Club  |