![]() |
![]() |
|
Помогите. не работает объединение запросов | ☑ | ||
---|---|---|---|---|
0
Cerera
04.06.12
✎
14:21
|
Пытаюсь объединить два запроса в которых есть совпадающие поля. но он не объединяет их. хотя должен. вот запрос.
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ разрешенные Расход.Номенклатура, Расход.ХарактеристикаНоменклатуры, Расход.ХарактеристикаНоменклатуры.XYZкласс КАК XYZкласс, Расход.ХарактеристикаНоменклатуры.ABCкласс КАК ABCкласс, СУММА(Расход.КоличествоРасход) КАК Расход, 0 КАК КоличествоОстаток, СДООбщаяДляНоменклатуры.СДО, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) КАК ЦП, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) КАК ВП, Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик КАК ОсновнойПоставщик, (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО КАК СЗ, СДООбщаяДляНоменклатуры.СДО * (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) + ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0)) + (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО КАК МинОст, Расход.Склад ИЗ Расход КАК Расход ЛЕВОЕ СОЕДИНЕНИЕ СДООбщаяДляНоменклатуры КАК СДООбщаяДляНоменклатуры ПО Расход.Номенклатура = СДООбщаяДляНоменклатуры.Номенклатура И Расход.ХарактеристикаНоменклатуры = СДООбщаяДляНоменклатуры.ХарактеристикаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНадежностиПоставщиков КАК ТаблицаНадежностиПоставщиков ПО Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик = ТаблицаНадежностиПоставщиков.Контрагент ГДЕ Расход.Склад = &Склад СГРУППИРОВАТЬ ПО Расход.Номенклатура, Расход.ХарактеристикаНоменклатуры, СДООбщаяДляНоменклатуры.СДО, Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0), ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0), Расход.Склад, Расход.ХарактеристикаНоменклатуры.XYZкласс, Расход.ХарактеристикаНоменклатуры.ABCкласс, (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО, СДООбщаяДляНоменклатуры.СДО * (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) + ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0)) + (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО ОБЪЕДИНИТЬ все ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.XYZкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ABCкласс, 0, СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток), 0, 0, 0, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ОсновнойПоставщик, 0, 0, ТоварыНаСкладахОстатки.Склад ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаАнализа, ) КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.XYZкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ABCкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ОсновнойПоставщик Но почему то поля с одинаковыми ключами все равно отдельными строками идут. даже если ОБЪЕДИНИТЬ все на объединить заменить. |
|||
1
PR
04.06.12
✎
14:22
|
Все правильно.
|
|||
2
acsent
04.06.12
✎
14:22
|
что значит не объеденяет?
|
|||
3
DrShad
04.06.12
✎
14:23
|
у тя во втором на два поля меньше
|
|||
4
DrShad
04.06.12
✎
14:23
|
+(3) ТС нужно личку поменять никуя он не программист 1С
|
|||
5
Maxus43
04.06.12
✎
14:24
|
ты группируеш каждый отельный запрос, а надо сгруппировать 1 раз оба запроса
|
|||
6
Cerera
04.06.12
✎
14:25
|
(3)как? в первом 13 и во втором 13
(4)программист это тот кто пишет программы. (5)убрать группировку? |
|||
7
Maxus43
04.06.12
✎
14:26
|
(6) убрать 2 группировки, обернуть всё во вложенный запрос и его уже 1 раз сгруппировать
|
|||
8
Cerera
04.06.12
✎
14:40
|
(7)а без вложенного значит нельзя?
|
|||
9
Maxus43
04.06.12
✎
14:42
|
ну можеш в ВТ запихнуть. ОБЪЕДИНИТЬ - добавляет строки снизу. ты сгруппировал один запрос, а потом СНИЗУ добавляеш другой сгруппированый... это ж видно вроде
|
|||
10
sapphire
04.06.12
✎
14:45
|
(9) Зачем?
|
|||
11
sapphire
04.06.12
✎
14:46
|
(8) А чем пугает вложенный запрос?
|
|||
12
Maxus43
04.06.12
✎
14:46
|
(10) >>Но почему то поля с одинаковыми ключами все равно отдельными строками идут
я это так расшифровал. он хочет объединённые запросы сгруппировать |
|||
13
sapphire
04.06.12
✎
14:48
|
(12) Я про временные таблицы. Про сгруппировать и так из запроса ясно.
|
|||
14
Maxus43
04.06.12
✎
14:51
|
(13) от задачи зависит... если надо проиндексировать для дальнейшего использования - в ВТ лучше сгруппировать сразу
|
|||
15
sapphire
04.06.12
✎
14:51
|
(12) Судя по всему - ему надо проверить что можно отгрузить поскольку фигурирует временная таблица "Расход".
|
|||
16
sapphire
04.06.12
✎
14:51
|
(14) Применение индексов не всегда оправдано.
|
|||
17
Maxus43
04.06.12
✎
14:52
|
в каждом случае конечно надо думать
|
|||
18
sapphire
04.06.12
✎
14:53
|
(17) на sqlcmd.ru есть полезное инфо об индексировании и прочей лабуде :)
|
|||
19
Cerera
04.06.12
✎
14:55
|
(11)не пугает. я просто хочу досконально понять что не так и как это работает. я хочу стать экспертом запросов как Maxus43 чтоб всякие (4)обходили меня стороной боясь облажаться
|
|||
20
Maxus43
04.06.12
✎
14:57
|
(19) я тупой и ленивый(
|
|||
21
sapphire
04.06.12
✎
14:59
|
(0) ТС, какие поля ДБ на выходе, все 13? Тогда
SELECT Номенклатура ,ХарактеристикаНоменклатуры ,MAX(XYZкласс) XYZкласс ,MAX(ABCкласс) ABCкласс ,SUM(Расход) Расход ,SUM(КоличествоОстаток) КоличествоОстаток ,MAX(СДО) СДО ,MAX(ЦП) ЦП ,MAX(ОсновнойПоставщик) ОсновнойПоставщик ,MAX(СЗ) СЗ ,MAX(МинОст) МинОст ,Склад FROM ( ВЫБРАТЬ разрешенные Расход.Номенклатура, Расход.ХарактеристикаНоменклатуры, Расход.ХарактеристикаНоменклатуры.XYZкласс КАК XYZкласс, Расход.ХарактеристикаНоменклатуры.ABCкласс КАК ABCкласс, СУММА(Расход.КоличествоРасход) КАК Расход, 0 КАК КоличествоОстаток, СДООбщаяДляНоменклатуры.СДО, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) КАК ЦП, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) КАК ВП, Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик КАК ОсновнойПоставщик, (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО КАК СЗ, СДООбщаяДляНоменклатуры.СДО * (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) + ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0)) + (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО КАК МинОст, Расход.Склад ИЗ Расход КАК Расход ЛЕВОЕ СОЕДИНЕНИЕ СДООбщаяДляНоменклатуры КАК СДООбщаяДляНоменклатуры ПО Расход.Номенклатура = СДООбщаяДляНоменклатуры.Номенклатура И Расход.ХарактеристикаНоменклатуры = СДООбщаяДляНоменклатуры.ХарактеристикаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНадежностиПоставщиков КАК ТаблицаНадежностиПоставщиков ПО Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик = ТаблицаНадежностиПоставщиков.Контрагент ГДЕ Расход.Склад = &Склад СГРУППИРОВАТЬ ПО Расход.Номенклатура, Расход.ХарактеристикаНоменклатуры, СДООбщаяДляНоменклатуры.СДО, Расход.ХарактеристикаНоменклатуры.ОсновнойПоставщик, ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0), ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0), Расход.Склад, Расход.ХарактеристикаНоменклатуры.XYZкласс, Расход.ХарактеристикаНоменклатуры.ABCкласс, (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО, СДООбщаяДляНоменклатуры.СДО * (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ВП, 0) + ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0)) + (ЕСТЬNULL(ТаблицаНадежностиПоставщиков.ЦП, 0) - 5.5) * СДООбщаяДляНоменклатуры.СДО ОБЪЕДИНИТЬ все ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.XYZкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ABCкласс, 0, СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток), 0, 0, 0, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ОсновнойПоставщик, 0, 0, ТоварыНаСкладахОстатки.Склад ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаАнализа, ) КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.XYZкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ABCкласс, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.ОсновнойПоставщик ) Запрос GROUP BY Номенклатура ,ХарактеристикаНоменклатуры ,Склад |
|||
22
Cerera
04.06.12
✎
15:00
|
(12)(15)мне нужно чтоб Расход и Остаток шли рядом. а у меня получается что
Товар1 Характеристика1 Расход 0 Товар1 Характеристика1 0 Остаток вместо того чтоб рядом идти. в одной строке |
|||
23
Cerera
04.06.12
✎
15:01
|
(21)сейчас разберусь спасибо! а как вы это сделали? в какой среде разработки? или ручками?
|
|||
24
sapphire
04.06.12
✎
15:02
|
(19) Ок. Смотри, создадим 2 таблицы
SELECT * INTO A FROM ( SELECT 1 a, 2 Б UNION ALL SELECT 1 a, 2 Б ) A; SELECT * INTO B FROM ( SELECT 1 a, 2 Б UNION SELECT 1 a, 2 Б ) B; SELECT * FROM A; // вернет 2 записи SELECT * FROM B; // вернет 1 запись |
|||
25
sapphire
04.06.12
✎
15:03
|
(23) Руками
|
|||
26
Maxus43
04.06.12
✎
15:03
|
(24) мне лень раскладку переключать, тока по руски пишу давно...)
|
|||
27
sapphire
04.06.12
✎
15:06
|
(24) Точнее вот так, из-за того, что 1С не любит, когда таблицы имеют одинаковые имена с полями:
SELECT * INTO Aa FROM ( SELECT 1 a, 2 Б UNION ALL SELECT 1 a, 2 Б ) Aа; SELECT * INTO Bb FROM ( SELECT 1 a, 2 Б UNION SELECT 1 a, 2 Б ) B; SELECT * FROM Aa; // вернет 2 записи SELECT * FROM Bb; // вернет 1 запись |
|||
28
sapphire
04.06.12
✎
15:07
|
(26) Я НИКОГДА не пишу запросы по-русски.
|
|||
29
Cerera
04.06.12
✎
15:08
|
понял! остается сейчас вникнуть!
благодарю вас! |
|||
30
Maxus43
04.06.12
✎
15:09
|
SELECT * FROM Bb, Аа; //крос джойн, вернёт все сочетания таблиц
(28) печально такое отлаживать если чесно. у нас прог один даже код по англицки писал... на него все матом ругались, а потом он уволился со словами 1с гамно) |
|||
31
sapphire
04.06.12
✎
15:12
|
(30) Неубедительно. Конструкции языка я пишу по-русски, да и ребятам ничего не стОит открыть запрос конструктором.
|
|||
32
Maxus43
04.06.12
✎
15:14
|
(31) а это не должно быть убедительно... это религиозное
|
|||
33
acsent
04.06.12
✎
15:26
|
(31) ты принципиально запрос конструктором не открываешь?
|
|||
34
hhhh
04.06.12
✎
15:32
|
(28) ну вот же, SELECT 1 a, 2 Б - буква "Б". Запрос по-русски. В топку.
|
|||
35
Cerera
06.06.12
✎
10:28
|
Кто может подсказать в какой книге можно прочитать про вложенные запросы? видеокурс есть но не могу на работе просмотреть.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |