|
Запрос, запустался с СОЕДИНЕНИЯМИ | ☑ | ||
---|---|---|---|---|
0
Skom
01.02.13
✎
12:42
|
Есть две таблицы, и возможны следующие их варианты
Таб1 A,B,C,D Таб2 A,B,C,D,F и Таб1 A,B,C,D,F Таб2 A,B,C,D т.е. в одном случае может быть, что в первой таблице больше строк, а в другом меньше. Запрос такого вида ВЫБРАТЬ Таб1.Поле1, Таб2.Поле1 Из Таб1 ЛЕВОЕ СОЕДИНЕНИЕ Таб2 ПО Таб2.Поле1 = Таб1.Поле1 как сделать что бы всегда набор записей возвращал и значение F (из данного примера) |
|||
1
cw014
01.02.13
✎
12:43
|
ПОЛНОЕ СОЕДИНЕНИЕ
|
|||
2
Skom
01.02.13
✎
12:43
|
а то в первом варианте таблицы в результате запрос возвращает 4 строки
|
|||
3
Ёпрст
01.02.13
✎
12:43
|
(0) Выкинуть левое соединение, использовать Объединить все или Полное Соединение
|
|||
4
Skom
01.02.13
✎
12:48
|
ПОЛНОЕ не прокатило
|
|||
5
Skom
01.02.13
✎
12:48
|
вот сам запрос
ВЫБРАТЬ Продажи.Регистратор КАК Чек ,Продажи.Регистратор.СуммаДокумента КАК Сумма ,Продажи.Номенклатура КАК Номенклатура ,СУММА(isnull(Продажи.СтоимостьОборот,0)) КАК СуммаСтроки ,СУММА(isnull(ПродажиСебестоимость.СтоимостьОборот,0)) КАК Себестоимость ИЗ РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость ПО ПродажиСебестоимость.Регистратор = Продажи.Регистратор И ПродажиСебестоимость.Номенклатура = Продажи.Номенклатура ГДЕ Продажи.Регистратор В (&Док) СГРУППИРОВАТЬ ПО Продажи.Регистратор, Продажи.Номенклатура, Продажи.Регистратор.СуммаДокумента АВТОУПОРЯДОЧИВАНИЕ |
|||
6
Skom
01.02.13
✎
12:49
|
в моем примере
Продажи - 6 строк ПродажиСебестоимость - 7 строк ЛЕВОЕ меняю на ПОЛНОЕ = 6 строк |
|||
7
cw014
01.02.13
✎
12:49
|
ГДЕ
Продажи.Регистратор В (&Док) Вот потому и не прокатило |
|||
8
Skom
01.02.13
✎
12:51
|
(7) не понял, если честно.
Продажи.Регистратор = ПродажиСебестоимость.Регистратор |
|||
9
Skom
01.02.13
✎
12:51
|
+8 это в моем случае. регистратор у них один и тот же
|
|||
10
Ёпрст
01.02.13
✎
12:51
|
+7 этим условием ты сделал inner join
|
|||
11
Fragster
гуру
01.02.13
✎
12:51
|
(6) это потому что Продажи.Регистратор это NULL. вообще очень жестокий запрос.
|
|||
12
Fragster
гуру
01.02.13
✎
12:52
|
(10) нет, только левое. но вообще запрос надо выкинуть.
|
|||
13
Skom
01.02.13
✎
12:52
|
(12) предложи другой вариант?
|
|||
14
Fragster
гуру
01.02.13
✎
12:53
|
(13) выкинуть таблицы оборотов
|
|||
15
Fragster
гуру
01.02.13
✎
12:53
|
заменить на объединение 2-х запросов и сворачивание.
|
|||
16
Skom
01.02.13
✎
12:56
|
Не хотелось изначально так делать, потому что вместо
ГДЕ Продажи.Регистратор В (&Док) там вот такой подзапрос)) ГДЕ Продажи.Регистратор В ( ВЫБРАТЬ РАЗЛИЧНЫЕ Док.Документ КАК Чек ИЗ (ВЫБРАТЬ МАКСИМУМ(ВзаиморасчетыОбороты.Регистратор.Дата) КАК ДатаОплаты, ВзаиморасчетыОбороты.Организация, ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом.Менеджер КАК Менеджер, ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом КАК Документ, СУММА(ВзаиморасчетыОбороты.СуммаВзаиморасчетовРасход+ВзаиморасчетыОбороты.СуммаВзаиморасчетовПриход*-1), ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(&НачДата, &КонДата,Регистратор,Организация В (&СписокОрганизаций)) КАК ВзаиморасчетыОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&КонДата) КАК ВзаиморасчетыОстатки ПО ВзаиморасчетыОстатки.ДокументРасчетовСКонтрагентом = ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом ГДЕ ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом.Контрагент В (&Контрагенты) И ТипЗначения(ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом) = ТИП(Документ.РеализацияТоваровУслуг) И ТипЗначения(ВзаиморасчетыОбороты.Регистратор) <> ТИП(Документ.РеализацияТоваровУслуг) И ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток,0) <= 0 СГРУППИРОВАТЬ ПО ВзаиморасчетыОбороты.Организация, ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом.Менеджер, ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом, ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ МАКСИМУМ(ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом.Дата) КАК ДатаОплаты, ВзаиморасчетыОбороты.Организация, ВзаиморасчетыОбороты.Регистратор.Менеджер КАК Менеджер, ВзаиморасчетыОбороты.Регистратор КАК Документ, СУММА(ВзаиморасчетыОбороты.СуммаВзаиморасчетовПриход), 0 КАК СуммаВзаиморасчетовОстаток ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(&НачДата, &КонДата,Регистратор,Организация В (&СписокОрганизаций)) КАК ВзаиморасчетыОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&КонДата) КАК ВзаиморасчетыОстатки ПО ВзаиморасчетыОстатки.ДокументРасчетовСКонтрагентом = ВзаиморасчетыОбороты.Регистратор ГДЕ ВзаиморасчетыОбороты.Регистратор.Контрагент В (&Контрагенты) И ТипЗначения(ВзаиморасчетыОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг) И ТипЗначения(ВзаиморасчетыОбороты.ДокументРасчетовСКонтрагентом) <> ТИП(Документ.РеализацияТоваровУслуг) И ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток,0) <= 0 СГРУППИРОВАТЬ ПО ВзаиморасчетыОбороты.Организация, ВзаиморасчетыОбороты.Регистратор.Менеджер, ВзаиморасчетыОбороты.Регистратор, 0 ) КАК Док ) |
|||
17
НафНаф
01.02.13
✎
12:57
|
объединение в ВТ
выбрать различные из ВТ |
|||
18
Fragster
гуру
01.02.13
✎
12:58
|
(16) выкинь все нафиг
|
|||
19
acsent
01.02.13
✎
12:58
|
а почему в продажах нет одной номенклатуры?
|
|||
20
Skom
01.02.13
✎
12:59
|
(19) там стоит 0 цена, поэтому он в продажи не попадает а в себестоимости отражается.
PS Особенности национального учета) |
|||
21
Skom
01.02.13
✎
12:59
|
+19 привет, земляк!))
|
|||
22
Ёпрст
01.02.13
✎
13:00
|
(16) забавный запрос, особенно в части фильтрации оборотов по конкретным видам доков
|
|||
23
Skom
01.02.13
✎
13:01
|
(18) особенности учета оплаченной реализации.
|
|||
24
Skom
01.02.13
✎
13:05
|
Смысл запроса из (5)
В табличной части документа "Реализация" например 10 строк. Номенклатура в 2 строках повторяется (например списание одной со склада а второй из резерва) Надо получить данные из регистра ПРОДАЖИ + ПРОДАЖИСЕБЕСТОИМОСТЬ А по факту в этих регистрах может получиться разное количество строк. |
|||
25
cw014
01.02.13
✎
13:06
|
(23)
ВЫБРАТЬ ВложенныйЗапрос.Чек, ВложенныйЗапрос.Сумма, ВложенныйЗапрос.Номенклатура, СУММА(ВложенныйЗапрос.СуммаСтроки) КАК СуммаСтроки, СУММА(ВложенныйЗапрос.Себестоимость) КАК Себестоимость ИЗ (ВЫБРАТЬ Продажи.Регистратор КАК Чек, Продажи.Регистратор.СуммаДокумента КАК Сумма Продажи.Номенклатура КАК Номенклатура, Продажи.СтоимостьОборот КАК СуммаСтроки, 0 КАК Себестоимость ИЗ РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ГДЕ Продажи.Регистратор В (&Док) ОБЪЕДИНИТЬ ВЫБРАТЬ ПродажиСебестоимость.Регистратор, ПродажиСебестоимость.Регистратор.СуммаДокумента ПродажиСебестоимость.Номенклатура, 0, ПродажиСебестоимость.СтоимостьОборот ИЗ РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость ГДЕ ПродажиСебестоимость.Регистратор В (&Док)) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Чек, ВложенныйЗапрос.Сумма, ВложенныйЗапрос.Номенклатура |
|||
26
Skom
01.02.13
✎
13:13
|
+25 такая реализация не очень красивая в моем случае из за слишком большого условия &Док
|
|||
27
Skom
01.02.13
✎
13:13
|
но рабочая, признаю
|
|||
28
Skom
01.02.13
✎
13:23
|
О, нашел выход, вот так надо сделать))
ВЫБРАТЬ РАЗЛИЧНЫЕ Д.Номенклатура ,Продажи.Регистратор КАК Чек ,Продажи.Регистратор.СуммаДокумента КАК Сумма //,Продажи.Номенклатура КАК Номенклатура ,СУММА(isnull(Продажи.СтоимостьОборот,0)) КАК СуммаСтроки ,СУММА(isnull(ПродажиСебестоимость.СтоимостьОборот,0)) КАК Себестоимость ИЗ Документ.РеализацияТоваровУслуг.Товары КАК Д ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ПО Продажи.Регистратор = Д.Ссылка И Продажи.Номенклатура = Д.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость ПО ПродажиСебестоимость.Регистратор = Д.Ссылка И ПродажиСебестоимость.Номенклатура = Д.Номенклатура ГДЕ Д.Ссылка В (&Док) СГРУППИРОВАТЬ ПО Продажи.Регистратор, Д.Номенклатура, Продажи.Регистратор.СуммаДокумента АВТОУПОРЯДОЧИВАНИЕ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |