Есть исходная таблица, из неё нужно получить таблицу как ниже.
Нужно всё сделать в запросе.
Я делаю первую [1] временную таблиц по типу А.
Делаю вторую [2] временную таблицу по типу Б.
Делаю временную таблицу [3] , получаю уникальные [точки-1-5]
И когда к последней таблице цепляю первую [1] и вторую [2], у меня задваивается Б и 10 (два раза), а нужно один раз.
Исходные данные:
Нужно всё сделать в запросе.
Я делаю первую [1] временную таблиц по типу А.
Делаю вторую [2] временную таблицу по типу Б.
Делаю временную таблицу [3] , получаю уникальные [точки-1-5]
И когда к последней таблице цепляю первую [1] и вторую [2], у меня задваивается Б и 10 (два раза), а нужно один раз.
Исходные данные:
ВЫБРАТЬ
"точка-1" КАК КП,
"А" КАК Тип,
20 КАК Количество
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-1",
"А",
40
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-1",
"Б",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-2",
"А",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-2",
"Б",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-3",
"Б",
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-4",
"А",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-4",
"Б",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-5",
"А",
55
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
Решение получилось такое:
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.КП КАК КП,
ВТ.Тип КАК Тип,
ВТ.Количество КАК Количество
ПОМЕСТИТЬ ВТ1
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Тип = "А"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.КП КАК КП,
ВТ.Тип КАК Тип,
ВТ.Количество КАК Количество
ПОМЕСТИТЬ ВТ2
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Тип = "Б"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ1.КП КАК КП,
ВТ1.Тип КАК Тип,
ВТ1.Количество КАК Количество,
АВТОНОМЕРЗАПИСИ() КАК ИД
ПОМЕСТИТЬ ВТ_3
ИЗ
ВТ1 КАК ВТ1
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ2.КП КАК КП,
ВТ2.Тип КАК Тип,
ВТ2.Количество КАК Количество,
АВТОНОМЕРЗАПИСИ() КАК ИД
ПОМЕСТИТЬ ВТ_4
ИЗ
ВТ2 КАК ВТ2
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
А1.КП КАК КП,
А1.Тип КАК Тип,
А1.Количество КАК Количество,
КОЛИЧЕСТВО(А1.ИД) КАК НПП
ПОМЕСТИТЬ ВТ_А
ИЗ
ВТ_3 КАК А1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_3 КАК А2
ПО А1.КП = А2.КП
И А1.ИД >= А2.ИД
СГРУППИРОВАТЬ ПО
А1.КП,
А1.Тип,
А1.Количество
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
А1.КП КАК КП,
А1.Тип КАК Тип,
А1.Количество КАК Количество,
КОЛИЧЕСТВО(А1.ИД) КАК НПП
ПОМЕСТИТЬ ВТ_Б
ИЗ
ВТ_4 КАК А1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_4 КАК А2
ПО А1.КП = А2.КП
И А1.ИД >= А2.ИД
СГРУППИРОВАТЬ ПО
А1.КП,
А1.Тип,
А1.Количество
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА ВТ_А.КП ЕСТЬ NULL
ТОГДА ВТ_Б.КП
ИНАЧЕ ВТ_А.КП
КОНЕЦ КАК КП,
ВТ_А.Тип КАК Тип,
ВТ_А.Количество КАК Количество,
ВТ_Б.Тип КАК Тип1,
ВТ_Б.Количество КАК Количество1
ИЗ
ВТ_А КАК ВТ_А
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Б КАК ВТ_Б
ПО ВТ_А.КП = ВТ_Б.КП
И ВТ_А.НПП = ВТ_Б.НПП
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Как вариант:
ВЫБРАТЬ
КП,
Тип КАК ТипА,
Количество КАК КоличествоА,
"Б" КАК ТипБ,
0 КАК КоличествоБ
ПОМЕСТИТЬ ВТОбщая
ИЗ
ВТДанные
ГДЕ
Тип = "А"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
КП,
"А",
0,
Тип,
Количество
ИЗ
ВТДанные
ГДЕ
Тип = "Б"
;
ВЫБРАТЬ
КП,
ТипА,
СУММА(КоличествоА) КАК КОличествоА,
ТипБ,
СУмма(КоличествоБ) КАК КоличествоБ
ИЗ
ВТОбщая
СГРУППИРОВАТЬ ПО
КП,
ТипА,
ТипБ
Показать
(10)
Выбрать
Т1.КП,
Т1.Тип,
Т1.Количество,
СУММА(1) КАК НомерСтроки
ПОМЕСТИТЬ ВТДанные_
ИЗ
ВТДанные КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ ВТДанные КАК Т2
ПО Т1.КП = Т2.КП
И Т1.Тип = Т2.Тип
И Т1.Количество >= Т2.Количество
СГРУППИРОВАТЬ ПО
Т1.КП,
Т1.Тип,
Т1.Количество
;
ВЫБРАТЬ
КП,
Тип КАК ТипА,
Количество КАК КоличествоА,
"Б" КАК ТипБ,
0 КАК КоличествоБ,
НомерСтроки
ПОМЕСТИТЬ ВТОбщая
ИЗ
ВТДанные_
ГДЕ
Тип = "А"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
КП,
"А",
0,
Тип,
Количество,
НомерСтроки
ИЗ
ВТДанные_
ГДЕ
Тип = "Б"
;
ВЫБРАТЬ
КП,
ТипА,
СУММА(КоличествоА) КАК КОличествоА,
ТипБ,
СУмма(КоличествоБ) КАК КоличествоБ
ИЗ
ВТОбщая
СГРУППИРОВАТЬ ПО
КП,
ТипА,
ТипБ,
НомерСтроки
Показать
(1) Например, вот
ВЫБРАТЬ
"точка-1" КАК КП,
"А" КАК Тип,
20 КАК Количество
ПОМЕСТИТЬ Таб1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-1",
"А",
40
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-1",
"Б",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-2",
"А",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-2",
"Б",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-3",
"Б",
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-4",
"А",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-4",
"Б",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"точка-5",
"А",
55
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Таб1.КП КАК КП
ПОМЕСТИТЬ Типы
ИЗ
Таб1 КАК Таб1
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Типы.КП КАК КП,
А.Тип КАК ТипА,
А.Количество КАК КоличествоА
ПОМЕСТИТЬ ТА
ИЗ
Типы КАК Типы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб1 КАК А
ПО Типы.КП = А.КП
И (А.Тип = "А")
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Типы.КП КАК КП,
Б.Тип КАК ТипБ,
Б.Количество КАК КоличествоБ
ПОМЕСТИТЬ ТБ
ИЗ
Типы КАК Типы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб1 КАК Б
ПО Типы.КП = Б.КП
И (Б.Тип = "Б")
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Типы.КП КАК КП,
ТА.ТипА КАК ТипА,
МИНИМУМ(ТА.КоличествоА) КАК КоличествоА,
ТБ.ТипБ КАК ТипБ,
МИНИМУМ(ТБ.КоличествоБ) КАК КоличествоБ
ПОМЕСТИТЬ ОбщаяТ
ИЗ
Типы КАК Типы
ЛЕВОЕ СОЕДИНЕНИЕ ТА КАК ТА
ПО (Типы.КП = ТА.КП)
ЛЕВОЕ СОЕДИНЕНИЕ ТБ КАК ТБ
ПО (Типы.КП = ТБ.КП)
СГРУППИРОВАТЬ ПО
Типы.КП,
ТА.ТипА,
ТБ.ТипБ
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ОбщаяТ.КП КАК КП,
ОбщаяТ.ТипА КАК ТипА,
ОбщаяТ.КоличествоА КАК КоличествоА,
ОбщаяТ.ТипБ КАК ТипБ,
ОбщаяТ.КоличествоБ КАК КоличествоБ
ИЗ
ОбщаяТ КАК ОбщаяТ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТА.КП,
ТА.ТипА,
ТА.КоличествоА,
NULL,
NULL
ИЗ
ТА КАК ТА
ЛЕВОЕ СОЕДИНЕНИЕ ОбщаяТ КАК ОбщаяТ
ПО ОбщаяТ.КП = ТА.КП
И ТА.ТипА = ОбщаяТ.ТипА
И ТА.КоличествоА = ОбщаяТ.КоличествоА
ГДЕ
ОбщаяТ.ТипА Есть Null
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТБ.КП,
NULL,
NULL,
ТБ.ТипБ,
ТБ.КоличествоБ
ИЗ
ТБ КАК ТБ
ЛЕВОЕ СОЕДИНЕНИЕ ОбщаяТ КАК ОбщаяТ
ПО ОбщаяТ.КП = ТБ.КП
И ТБ.ТипБ = ОбщаяТ.ТипБ
И ТБ.КоличествоБ = ОбщаяТ.КоличествоБ
ГДЕ
ОбщаяТ.ТипБ Есть Null
ПоказатьПрикрепленные файлы:
(3)
ВЫБРАТЬ
Максимум(ВЫБОР
КОГДА Тип="А"
ТОГДА "А"
КОНЕЦ),
Сумма(ВЫБОР КОГДА Тип="А"
ТОГДА Количество
КОНЕЦ),
Максимум(ВЫБОР
КОГДА Тип="Б"
ТОГДА "Б"
КОНЕЦ),
Сумма(ВЫБОР КОГДА Тип="Б"
ТОГДА Количество
КОНЕЦ)
ИЗ ВременнаяТаблица как вт
СГРУППИРОВАТЬ по вт.кп
Показать
Решение получилось такое:
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.КП КАК КП,
ВТ.Тип КАК Тип,
ВТ.Количество КАК Количество
ПОМЕСТИТЬ ВТ1
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Тип = "А"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.КП КАК КП,
ВТ.Тип КАК Тип,
ВТ.Количество КАК Количество
ПОМЕСТИТЬ ВТ2
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Тип = "Б"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ1.КП КАК КП,
ВТ1.Тип КАК Тип,
ВТ1.Количество КАК Количество,
АВТОНОМЕРЗАПИСИ() КАК ИД
ПОМЕСТИТЬ ВТ_3
ИЗ
ВТ1 КАК ВТ1
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ2.КП КАК КП,
ВТ2.Тип КАК Тип,
ВТ2.Количество КАК Количество,
АВТОНОМЕРЗАПИСИ() КАК ИД
ПОМЕСТИТЬ ВТ_4
ИЗ
ВТ2 КАК ВТ2
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
А1.КП КАК КП,
А1.Тип КАК Тип,
А1.Количество КАК Количество,
КОЛИЧЕСТВО(А1.ИД) КАК НПП
ПОМЕСТИТЬ ВТ_А
ИЗ
ВТ_3 КАК А1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_3 КАК А2
ПО А1.КП = А2.КП
И А1.ИД >= А2.ИД
СГРУППИРОВАТЬ ПО
А1.КП,
А1.Тип,
А1.Количество
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
А1.КП КАК КП,
А1.Тип КАК Тип,
А1.Количество КАК Количество,
КОЛИЧЕСТВО(А1.ИД) КАК НПП
ПОМЕСТИТЬ ВТ_Б
ИЗ
ВТ_4 КАК А1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_4 КАК А2
ПО А1.КП = А2.КП
И А1.ИД >= А2.ИД
СГРУППИРОВАТЬ ПО
А1.КП,
А1.Тип,
А1.Количество
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА ВТ_А.КП ЕСТЬ NULL
ТОГДА ВТ_Б.КП
ИНАЧЕ ВТ_А.КП
КОНЕЦ КАК КП,
ВТ_А.Тип КАК Тип,
ВТ_А.Количество КАК Количество,
ВТ_Б.Тип КАК Тип1,
ВТ_Б.Количество КАК Количество1
ИЗ
ВТ_А КАК ВТ_А
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Б КАК ВТ_Б
ПО ВТ_А.КП = ВТ_Б.КП
И ВТ_А.НПП = ВТ_Б.НПП
Показать
(25) Ниже два запроса. Один оконная функция нумерации по группировкам. И тоже самое только сначала сплошная нумерация, а потом расчет npp_gr как нумерации по группировкам (+40% времени на данном коротком и маленьком примере).
Саму нумерацию можно сделать без row_number().
Извращаться можно до бесконечности.
Можно на ассемблере написать программу не использую команду MOV, только не понятно зачем так делать.
Саму нумерацию можно сделать без row_number().
Извращаться можно до бесконечности.
Можно на ассемблере написать программу не использую команду MOV, только не понятно зачем так делать.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот