|
подскажите с запросом, пожалуйста | ☑ | ||
---|---|---|---|---|
0
mephistos
21.02.14
✎
11:21
|
Доброго утра, ребята ! Всем лучей добра и счастья !
Сабж: делаю отчет, там 100500 вложенных, и куча таблиц соединяется. И вот в итоге идет полное соединение двух таблиц. И ситуация такая: в одной таблице остатки, грубо говоря, в другой - продажи. В таблице остатков , скажем, 14 позиций, а в продажах - 15. Соединяются по полю номенклатуры. И эта одна позиция не попадает в объединение в итоге. Полагаю, так как ее нет в остатках :( но разве при полном соединении не все соединяется ? я просто думал, что Номенклатура1 будет NULL, а вторая - из второй таблицы, и данные присоединятся. ан нет .. Надеюсь, я доступно объяснил свою тупость :) |
|||
1
el7cartel
21.02.14
✎
11:23
|
(0) левое соединение по таблице где 15 позиций! при полном соединении получается произведение!
|
|||
2
ДенисЧ
21.02.14
✎
11:24
|
Наверное, что-то не так делаешь...
|
|||
3
Fram
21.02.14
✎
11:24
|
(0) вполне доступно
в разделе ГДЕ стоит условие которое срезает то что есть в продажах и нет в остатках |
|||
4
Alex375
21.02.14
✎
11:24
|
Сложно судить без запроса. Ну или хотя бы той части где ты соединяешь 2 таблицы. Какое соединение делаешь? Или может быть ты их вообще через "ГДЕ" соединяешь? Или еще как-то? :)
|
|||
5
mephistos
21.02.14
✎
11:25
|
Секунду, приведу запрос. Только не пинайте, пожалуйста, сразу. Я только учусь ..:)
|
|||
6
Жан Пердежон
21.02.14
✎
11:25
|
или в выбор указывается подразделение из одной таблицы, а в твоем случае надо ЕСТЬNULL(...)
|
|||
7
mephistos
21.02.14
✎
11:27
|
Я просто сейчас чувствую, что меня обплюют, обоссут, отпинают, и скажут идти читать ЖКК, матчасть итд ..:)
|
|||
8
mephistos
21.02.14
✎
11:29
|
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура, | ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток, | СУММА(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток) КАК Резерв, | ВложенныйЗапрос.ИнтернетСклад, | ВложенныйЗапрос.ДинамоСклад, | ВложенныйЗапрос.ПервомайскаяСклад, | ВложенныйЗапрос.МневникиСклад, | ВложенныйЗапрос.КоломенскаяСклад, | ВложенныйЗапрос.ВозвратыСклад, | ВложенныйЗапрос.АртикулПоставщика, | ВложенныйЗапрос.ПринцСклад, | ВложенныйЗапрос.ОптИтого, | ВложенныйЗапрос.КоличествоОборот, | ВложенныйЗапрос.ОсновнойСклад, | ВложенныйЗапрос.Интернет, | ВложенныйЗапрос.Розница, | ВложенныйЗапрос.Номенклатура1 |ИЗ | (ВЫБРАТЬ | СУММА(ВложенныйЗапрос.ИнтернетСклад) КАК ИнтернетСклад, | СУММА(ВложенныйЗапрос.ДинамоСклад) КАК ДинамоСклад, | СУММА(ВложенныйЗапрос.ПервомайскаяСклад) КАК ПервомайскаяСклад, | СУММА(ВложенныйЗапрос.МневникиСклад) КАК МневникиСклад, | СУММА(ВложенныйЗапрос.КоломенскаяСклад) КАК КоломенскаяСклад, | СУММА(ВложенныйЗапрос.ВозвратыСклад) КАК ВозвратыСклад, | СУММА(ВложенныйЗапрос.ПринцСклад) КАК ПринцСклад, | СУММА(ВложенныйЗапрос1.ОптИтого) КАК ОптИтого, | СУММА(ВложенныйЗапрос.ОсновнойСклад) КАК ОсновнойСклад, | СУММА(ВложенныйЗапрос2.Количество) КАК Интернет, | СУММА(ВложенныйЗапрос3.Розница) КАК Розница, | ВложенныйЗапрос.Номенклатура КАК Номенклатура, | ВложенныйЗапрос4.КоличествоОборот КАК КоличествоОборот, | ВложенныйЗапрос4.АртикулПоставщика КАК АртикулПоставщика, | ВложенныйЗапрос4.Номенклатура КАК Номенклатура1, | СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток | ИЗ | (ВЫБРАТЬ | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад2 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ИнтернетСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад3 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ДинамоСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад4 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ПервомайскаяСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад6 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК МневникиСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад7 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК КоломенскаяСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад8 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ВозвратыСклад, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад5 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ПринцСклад, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстатки.Склад = &Склад1 | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ) КАК ОсновнойСклад, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, ) КАК ТоварыНаСкладахОстатки | ГДЕ | ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура) | | СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура) КАК ВложенныйЗапрос | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Продажи.Номенклатура КАК Номенклатура, | СУММА(ВЫБОР | КОГДА Продажи.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг | ТОГДА Продажи.Количество | ИНАЧЕ 0 | КОНЕЦ) КАК ОптИтого | ИЗ | РегистрНакопления.Продажи КАК Продажи | ГДЕ | Продажи.Период МЕЖДУ &НачПериода И &КонПериода | И Продажи.ДокументПродажи.Контрагент В ИЕРАРХИИ(&ОПТ) | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура) КАК ВложенныйЗапрос1 | ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Продажи.Номенклатура КАК Номенклатура, | СУММА(Продажи.Количество) КАК Количество | ИЗ | РегистрНакопления.Продажи КАК Продажи | ГДЕ | Продажи.Организация = &Дорофеев | И Продажи.Контрагент <> &Контр | И Продажи.Период МЕЖДУ &НачПериода И &КонПериода | И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура) | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура) КАК ВложенныйЗапрос2 | ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос2.Номенклатура | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Продажи.Номенклатура КАК Номенклатура, | СУММА(Продажи.Количество) КАК Розница | ИЗ | РегистрНакопления.Продажи КАК Продажи | ГДЕ | Продажи.ДокументПродажи ССЫЛКА Документ.ОтчетОРозничныхПродажах | И Продажи.ДокументПродажи.КассаККМ В ИЕРАРХИИ(&СЗКассы) | И Продажи.Период МЕЖДУ &НачПериода И &КонПериода | И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура) | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура) КАК ВложенныйЗапрос3 | ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос3.Номенклатура | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Продажи.Номенклатура КАК Номенклатура, | СУММА(Продажи.Количество) КАК КоличествоОборот, | НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента КАК АртикулПоставщика, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток | ИЗ | РегистрНакопления.Продажи КАК Продажи | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов | ПО Продажи.Номенклатура = НоменклатураКонтрагентов.Номенклатура | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, ) КАК ТоварыНаСкладахОстатки | ПО Продажи.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура | ГДЕ | Продажи.Период МЕЖДУ &НачПериода И &КонПериода | И Продажи.Номенклатура.ЭтоГруппа = ЛОЖЬ | И Продажи.Номенклатура В ИЕРАРХИИ(&Номенклатура) | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура, | НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента) КАК ВложенныйЗапрос4 | ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос4.Номенклатура | | СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос4.КоличествоОборот, | ВложенныйЗапрос4.АртикулПоставщика, | ВложенныйЗапрос4.Номенклатура) КАК ВложенныйЗапрос | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&КонПериода, ) КАК ТоварыВРезервеНаСкладахОстатки | ПО ВложенныйЗапрос.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.КоличествоОстаток, | ВложенныйЗапрос.ИнтернетСклад, | ВложенныйЗапрос.ДинамоСклад, | ВложенныйЗапрос.ПервомайскаяСклад, | ВложенныйЗапрос.МневникиСклад, | ВложенныйЗапрос.КоломенскаяСклад, | ВложенныйЗапрос.ВозвратыСклад, | ВложенныйЗапрос.АртикулПоставщика, | ВложенныйЗапрос.ПринцСклад, | ВложенныйЗапрос.ОптИтого, | ВложенныйЗапрос.КоличествоОборот, | ВложенныйЗапрос.ОсновнойСклад, | ВложенныйЗапрос.Интернет, | ВложенныйЗапрос.Розница, | ВложенныйЗапрос.Номенклатура1 | |УПОРЯДОЧИТЬ ПО | Номенклатура |{УПОРЯДОЧИТЬ ПО | Номенклатура.*}"; При связи ВложенногоЗапроса и ВложенногоЗапроса2 из второй таблицы не попадает позиция. |
|||
9
el7cartel
21.02.14
✎
11:29
|
(7) никто ничего не скажет! все когда так начинали! спецами не рождаются, а становятся! а в том, что у тебя возникают проблемы, нет ничего опасного и стыдного!
|
|||
10
огурец
21.02.14
✎
11:29
|
ЕСТЬNULL(ВТ0.Номенклатура1,ВТ1.Номенклатура )
И точно самое для других полей: ЕСТЬNULL(ВТ0.Сумма,0 ) |
|||
11
mephistos
21.02.14
✎
11:31
|
По отдельности запросы выбирают все, как надо. А как соединяю - бяда ..
|
|||
12
огурец
21.02.14
✎
11:34
|
(11) делаешь так:
| ЕСТЬNULL(ОборотыДтКт.Номенклатура, Остатки.Номнклатура) КАК Номенклатура, | ЕСТЬNULL(ОборотыДтКт.Документ, Остатки.Документ) КАК Документ, | СУММА(ЕСТЬNULL(Остатки.КоличествоНачальныйОстаток, 0)) КАК КоличествоНачальныйОстаток, | СУММА(ЕСТЬNULL(Остатки.СуммаНачальныйОстаток, 0)) КАК СуммаНачальныйОстаток, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПоступлениеКоличество, 0)) КАК ПоступлениеКоличество, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПоступлениеСумма, 0)) КАК ПоступлениеСумма, | СУММА(ЕСТЬNULL(ОборотыДтКт.СписаниеКоличество, 0)) КАК СписаниеКоличество, | СУММА(ЕСТЬNULL(ОборотыДтКт.СписаниеСумма, 0)) КАК СписаниеСумма, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПродажаКоличество, 0)) КАК ПродажаКоличество, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПродажаСумма, 0)) КАК ПродажаСумма, | СУММА(ЕСТЬNULL(ОборотыДтКт.ЗатратыКоличество, 0)) КАК ЗатратыКоличество, | СУММА(ЕСТЬNULL(ОборотыДтКт.ЗатратыСумма, 0)) КАК ЗатратыСумма, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПрочееКоличество, 0)) КАК ПрочееКоличество, | СУММА(ЕСТЬNULL(ОборотыДтКт.ПрочееСумма, 0)) КАК ПрочееСумма, | СУММА(ЕСТЬNULL(Остатки.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(Остатки.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток |
|||
13
mephistos
21.02.14
✎
11:39
|
(12) Идею понял, но не понял, как реализовать на практике. Я делаю по аналогии с тепм, что видел.
|
|||
14
mephistos
21.02.14
✎
11:40
|
(12) Синтаксически, я сейчас пишу выборку, потом полное соединение ПО и ниже в запросе следующую выборку, с которой соединяться таблицы будут.
Как сюда применить ? Суть я понял, если поля нет, то как раз NULL будет. А как синтаксически написать ? |
|||
15
огурец
21.02.14
✎
11:42
|
(14) Если в одной таблице Номенклатура= Нулл, тогда берешь её из другой таблицы.
ЕСТЬNULL(ОборотыДтКт.Номенклатура, Остатки.Номнклатура) Что не понятно? |
|||
16
mephistos
21.02.14
✎
11:45
|
(15) Типа: |
ЕСТЬNULL(ВложенныйЗапрос.Номенклатура,0) КАК Номенклатура, ? |
|||
17
огурец
21.02.14
✎
11:58
|
(16) У тебя же сравнение
ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура ЕСТЬNULL(ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос1.Номенклатура) |
|||
18
el7cartel
21.02.14
✎
12:03
|
(16) нет! смотри на примере, функция ЕСТЬNULL(Сумма, 0) осуществляет проверку типа если пустое значение, то сумма равна 0! и вот вместо нуля ты может подставить абсолютно любое значение! и в твоем случае получается, что ты проверяешь значение из первого запроса и если она пустое, то его ты заменяешь значением из второго запроса!
|
|||
19
kinno
21.02.14
✎
13:01
|
использую ОБЪЕДИНИТЬ ВСЕ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |