1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Опять запрос

Тема в разделе "Базы данных и администрирование", создана пользователем Renat11111, 7 ноя 2009.

  1. Renat11111

    Renat11111 Well-Known Member

    Репутация:
    0
    Регистрация:
    20 апр 2008
    Сообщения:
    123
    Симпатии:
    0
    Опять элементарная проблема с запросом. очень туго поддаюсь процессу обучения )))

    из таблицы Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной нужны мне все сотрудники, а таблицу
    |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК ЗарплатаВыплачена использую для того чтобы
    получить сумму ВыплаченностьЗарплаты = &Выплачено.
    тоесть имеем например 10 сотрудников с общей суммой 20000
    из них токо у 9 ВыплаченностьЗарплаты = &Выплачено.
    вроде и понимаю я что своим условием соединения отсекаю одного сотрудника у меня выбирает 9 сотрудников
    |И ЗарплатаВыплачена.ВыплаченностьЗарплаты = &Выплачено
    Но ниче придумать не могу.

    |ВЫБРАТЬ
    | Основной.НомерСтроки КАК НомерСтроки,
    | Основной.Сотрудник.ФизЛицо КАК СсылкаФизЛицо,
    | Основной.НомерКарточки КАК НомерКарточки,
    | ВЫБОР КОГДА (ФИОФизЛицСрезПоследних.Фамилия) ЕСТЬ NULL
    | ТОГДА Основной.Сотрудник.Физлицо.Наименование
    | ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ФИОФизЛицСрезПоследних.Имя + "" "" + ФИОФизЛицСрезПоследних.Отчество
    | КОНЕЦ КАК ФизЛицо,
    | ВЫБОР КОГДА Основной.ВыплаченностьЗарплаты = ЗНАЧЕНИЕ(Перечисление.ВыплаченностьЗарплаты.Задепонировано)
    | ТОГДА ""Задепонировано""
    | ИНАЧЕ """"
    | КОНЕЦ КАК ЗаписьОДепонировании,
    | Основной.Сотрудник.Код КАК ТабельныйНомер,
    | СУММА(Основной.Сумма) КАК СУММА,
    | СУММА(ЗарплатаВыплачена.Сумма) КАК СуммаОплачено
    |ИЗ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДокумента, Физлицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ Основной.Сотрудник.Физлицо КАК Физлицо ИЗ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной ГДЕ Основной.Ссылка = &ДокументСсылка )) КАК ФИОФизЛицСрезПоследних
    |ПО Основной.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо
    |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК ЗарплатаВыплачена
    |ПО Основной.Сотрудник.Физлицо= ЗарплатаВыплачена.Сотрудник.Физлицо
    |И ЗарплатаВыплачена.ВыплаченностьЗарплаты = &Выплачено
    |ГДЕ Основной.Ссылка = &ДокументСсылка
    | И Основной.СпособВыплаты = &ЧерезБанк
    | И Основной.Банк = &Банк
    | И ЗарплатаВыплачена.Ссылка = &ДокументСсылка
    | И ЗарплатаВыплачена.СпособВыплаты = &ЧерезБанк
    |
    |СГРУППИРОВАТЬ ПО
    | Основной.НомерСтроки,
    | Основной.Сотрудник.ФизЛицо,
    | Основной.НомерКарточки,
    | ВЫБОР КОГДА (ФИОФизЛицСрезПоследних.Фамилия) ЕСТЬ NULL
    | ТОГДА Основной.Сотрудник.Физлицо.Наименование
    | ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ФИОФизЛицСрезПоследних.Имя + "" "" + ФИОФизЛицСрезПоследних.Отчество
    | КОНЕЦ,
    | ВЫБОР КОГДА Основной.ВыплаченностьЗарплаты = ЗНАЧЕНИЕ(Перечисление.ВыплаченностьЗарплаты.Задепонировано)
    | ТОГДА ""Задепонировано""
    | ИНАЧЕ """"
    | КОНЕЦ,
    | Основной.Сотрудник.Код
    |
    |УПОРЯДОЧИТЬ ПО
    | Основной.НомерСтроки
    |";
     
  2. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Почему нельзя исползовать одну таблицу? Если сумму нужно получать только когда зп выплачена, используйте конструкцию "ВЫБОР... КОГДА".
     
  3. tanat

    tanat Well-Known Member

    Репутация:
    0
    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Если я не ошибаюсь, то можно использовать ПРАВОЕ СОЕДИНЕНИЕ
     
  4. puh14

    puh14 Well-Known Member

    Репутация:
    0
    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    |ИЗ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДокумента, Физлицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ Основной.Сотрудник.Физлицо КАК Физлицо ИЗ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной ГДЕ Основной.Ссылка = &ДокументСсылка )) КАК ФИОФизЛицСрезПоследних
    |ПО Основной.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо
    |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК ЗарплатаВыплачена
    |ПО Основной.Сотрудник.Физлицо= ЗарплатаВыплачена.Сотрудник.Физлицо
    |И ЗарплатаВыплачена.ВыплаченностьЗарплаты = &Выплачено

    |ГДЕ Основной.Ссылка = &ДокументСсылка

    | И Основной.СпособВыплаты = &ЧерезБанк
    | И Основной.Банк = &Банк
    | И ЗарплатаВыплачена.Ссылка = &ДокументСсылка

    Что-то я юмора не понял - ты два раза выбираешь данные из одного и того-же документа. Зачем так?

    а режет у тебе скорее всего на ГДЕ ибо левое соединение только null сделать могёт

    | И Основной.Банк = &Банк
    | И ЗарплатаВыплачена.Ссылка = &ДокументСсылка
    | И ЗарплатаВыплачена.СпособВыплаты = &ЧерезБанк

    поскольку сильно подозреваю, что в при отсутствии зарплаты банка у тебя нет

    тебе тогда проще из регистра сведений левым соединением в документ прыгать с условиями на ссылки, банки и т.д.
     
  5. Renat11111

    Renat11111 Well-Known Member

    Репутация:
    0
    Регистрация:
    20 апр 2008
    Сообщения:
    123
    Симпатии:
    0
    Ответившим спасибо, уже сам разобрался.
     
  6. vitfil

    vitfil IT-интегратор

    Репутация:
    0
    Регистрация:
    2 апр 2004
    Сообщения:
    2.062
    Симпатии:
    0
    я бы порекомендовал крайне редко его использовать...
    исходя хотя бы из того, как будет построен план запроса...
     
  7. tanat

    tanat Well-Known Member

    Репутация:
    0
    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    А есть существенные отличия? Я всегда считал, что ЛЕВОЕ или ПРАВОЕ соединение - это лишь правило, по которому объединяются 2 таблицы. Если левое - то берутся все колонки из таблицы, указанной слева от записи СОЕДИНЕНИЕ, если ПРАВОЕ- то из той, что справа?
    Все зависит от порядка указания таблиц...
    Или может я не понял сути замечания? :)
     
  8. vitfil

    vitfil IT-интегратор

    Репутация:
    0
    Регистрация:
    2 апр 2004
    Сообщения:
    2.062
    Симпатии:
    0
    Ну представьте себе, что есть объединение... Поясню на примере.

    Допустим имеются 2 таблицы:
    Т1
    Код:
    А  В
    1  123
    2  227
    3  200
    4  222
    Т2
    Код:
    А  В
    1  123
    9  229
    3  200
    7  224
    1  227
    Код:
    select * from t1 left join t2 on t1.a = t2.a
    Получаем следующую таблицу:
    Код:
    т1.а  т1.В  т2.А  Т2.В
    1	  123	1	  123
    2	  227
    3	  200	3	  200
    4	  222
    Код:
    select * from t1 right join t2 on t1.a = t2.a
    Получаем следующую таблицу:
    Код:
    т1.а  т1.В  т2.А  Т2.В
    1	  123	1	  123
    9	  229
    3	  200	3	  200
    7	  224
    1	  123	1	  227
    И что получается? Делая выборку из Т1, фактически получаем выборку из Т2 с левым соединением с таблицей Т1. Хотя на самом деле требовалась выборка из таблицы Т1.
     
  9. tanat

    tanat Well-Known Member

    Репутация:
    0
    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Я это и имел ввиду, говоря о порядке таблиц). Особой разницы я все равно не вижу. Если задача позволяет пользоваться ПРАВЫМ и вы понимаете, какой результат в итоге получите - почему бы не воспользоватсья?
     
Загрузка...
Похожие Темы - Опять запрос
  1. vitte
    Ответов:
    10
    Просмотров:
    3.083
  2. sanch
    Ответов:
    5
    Просмотров:
    3.146
  3. NickProstoNick
    Ответов:
    5
    Просмотров:
    2.770
  4. aameno2
    Ответов:
    4
    Просмотров:
    3.182
  5. wowa
    Ответов:
    16
    Просмотров:
    5.514

Поделиться этой страницей