Имя: Пароль:
1C
1С v8
Запрос. Выбрать более одного заполненного поля по сотруднику.
0 Alxesp
 
14.12.15
10:03
В таблице есть поле "Сотрудник" + текстовые поля "поле1", "поле2", "поле3".
Нужно выбрать строки с одинаковым сотрудником и при этом любое из полей должно быть заполнено (не = "") более, чем в 1 строке.
Натолкните на мысль плиз - что-то ничего в голову не приходит.
1 asady
 
14.12.15
10:08
(0) приведи пример
2 aleks_default
 
14.12.15
10:14
СУММА (ВЫБОР КОГДА Поле1<>"" ИЛИ Поле2<>"" ИЛИ Поле3<>"" ТОГДА 1 Иначе 0 КОНЕЦ)
3 Alxesp
 
14.12.15
10:16
(1) Блин. Понятно же вроде написал.

№  Фамилия Поле1 Поле2
1) Иванов   "АВ"  ""
2) Петров   ""    "ВА"  
3) Иванов   "РК"  ""
4) Петров   "СМ"  ""

Должна быть выбрана 1) и 3)
4 Alxesp
 
14.12.15
10:18
(2) Одно и тоже поле в разных строках с одним сотрудником, а не в одной строке!
(видимо непонятно написал :()
5 salvator
 
14.12.15
10:21
(2) Только наверно не ИЛИ, а И
6 Alxesp
 
14.12.15
10:21
(3) (4) Грубо говоря при свертке по сотруднику(и суммированию по полям Поле1, поле2...) должно быть только два символа в поле (заполнено значение только в одной строке). Строк не удовлетворяющие этому условию и нужно найти (выбрать).
7 Alxesp
 
14.12.15
10:24
(2) (5) Да мне по барабану сколько заполнено в 1-й строке!
В разных строках с одним сотрудником поле должно быть заполнено только 1 раз (в одной строке)!
Или вы про это же? Тогда недопонял.
8 salvator
 
14.12.15
10:35
Как-то так

ВЫБРАТЬ
    Таб.Сотрудник,
    СУММА(ВЫБОР
            КОГДА Таб.Поле1 = ""
                ТОГДА 0
            ИНАЧЕ 1
        КОНЕЦ) КАК СчПоле1,
    СУММА(ВЫБОР
            КОГДА Таб.Поле2 = ""
                ТОГДА 0
            ИНАЧЕ 1
        КОНЕЦ) КАК СчПоле2,
    СУММА(ВЫБОР
            КОГДА Таб.Поле3 = ""
                ТОГДА 0
            ИНАЧЕ 1
        КОНЕЦ) КАК СчПоле3
ПОМЕСТИТЬ ТабВрем
ИЗ
    Таб КАК Таб
СГРУППИРОВАТЬ ПО
    Таб.Сотрудник
;
ВЫБРАТЬ
    Таб.Сотрудник,
    Таб.Поле1,
    Таб.Поле2,
    Таб.Поле3
ИЗ
    ТабВрем КАК ТабВрем
    ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб
    ПО ТабВрем.Сотрудник = Таб.Сотрудник
ГДЕ ТабВрем.СчПоле1 > 1 ИЛИ ТабВрем.СчПоле2 > 1 ИЛИ ТабВрем.СчПоле3 > 1
;
9 aleks_default
 
14.12.15
10:47
(8)Что ты сделал? Надо было идею человеку подать, а не задачу решить. Вот чем ему теперь заняться?:)
10 Alxesp
 
14.12.15
10:49
(8) Спасибо.
11 Мэс33
 
14.12.15
10:58
(9) ну что теперь:
   Alxesp - ставим пять
а  salvator - двойку )))
12 aleks_default
 
14.12.15
11:10
(11) "Вот так и учатся на врача, а потом людей лечат"(с)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший