|   |   | 
| 
 | Запрос, запустался с СОЕДИНЕНИЯМИ | ☑ | ||
|---|---|---|---|---|
| 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)) КАК Себестоимость ИЗ Документ.РеализацияТоваровУслуг.Товары КАК Д ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ПО Продажи.Регистратор = Д.Ссылка И Продажи.Номенклатура = Д.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость ПО ПродажиСебестоимость.Регистратор = Д.Ссылка И ПродажиСебестоимость.Номенклатура = Д.Номенклатура ГДЕ Д.Ссылка В (&Док) СГРУППИРОВАТЬ ПО Продажи.Регистратор, Д.Номенклатура, Продажи.Регистратор.СуммаДокумента АВТОУПОРЯДОЧИВАНИЕ | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |