| 
    
            
         
         | 
    
  | 
Булева сумма или как отобрать одно значение по нескольким совпадающим полям? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        BaZZiL    
     02.12.22 
            ✎
    14:09 
 | 
         
        Приветствую уважаемое сообщество!
 
        Есть таблица с колонками "Флаг" (булево) и "Ссылка", где для Ссылка1 все условия выполнены, а для Ссылка2 не все: Флаг |Ссылка ----------- Истина |Ссылка1 Истина |Ссылка1 Ложь |Ссылка2 Истина |Ссылка2 Как отобрать запросом только те ссылки, у которых во всех строках значения Флага = Истина? Т.е. результатом должно быть "Ссылка1"  | 
|||
| 
    1
    
        Kassern    
     02.12.22 
            ✎
    14:11 
 | 
         
        (0) Как вариант, отобрать все у которых стоит ложь, далее вычесть эту таблицу из общей. Будут только те ссылки которые имеют флаг истина     
         | 
|||
| 
    2
    
        mikecool    
     02.12.22 
            ✎
    14:12 
 | 
         
        левое соединение саму с собой с отбором по Флаг = Ложь
 
        где справа есть нулл  | 
|||
| 
    3
    
        Kassern    
     02.12.22 
            ✎
    14:12 
 | 
         
        Если же вам просто нужно вывести все ссылки, у которых флаг Истина, то обычный отбор по этому полю     
         | 
|||
| 
    4
    
        mikecool    
     02.12.22 
            ✎
    14:12 
 | 
         
        (3) не канает     
         | 
|||
| 
    5
    
        Kassern    
     02.12.22 
            ✎
    14:13 
 | 
         
        (2) В общем, как я и написал в (1) )     
         | 
|||
| 
    6
    
        Kassern    
     02.12.22 
            ✎
    14:14 
 | 
         
        (4) Еще как канает, для условия "если.." в моем сообщении.     
         | 
|||
| 
    7
    
        Aleksey    
     02.12.22 
            ✎
    14:15 
 | 
         
        заменить булево на число (0,1) и далее если количество ссылок = итог флаг - значит все истина     
         | 
|||
| 
    8
    
        Kassern    
     02.12.22 
            ✎
    14:16 
 | 
         
        (7) Можно и не заменять, просто сгруппировать по ссылке и взять минимум по флагу. А дальше отбор флаг=Истина     
         | 
|||
| 
    9
    
        mikecool    
     02.12.22 
            ✎
    14:17 
 | 
         
        (7) тоже верно
 
        имеющие Количество(Ссылка) = Сумма(Флаг)  | 
|||
| 
    10
    
        lodger    
     02.12.22 
            ✎
    14:18 
 | 
         
        (0) имеющие минимум(Флаг) = Истина     
         | 
|||
| 
    11
    
        mikecool    
     02.12.22 
            ✎
    14:18 
 | 
         
        жаль неявного преобразования Булево к Числу в запросе нет )     
         | 
|||
| 
    12
    
        Волшебник    
     модератор 
    02.12.22 
            ✎
    14:18 
 | 
         
        >> Булева сумма...
 
        Булева алгебра вышла из чата  | 
|||
| 
    13
    
        Garykom    
     гуру 
    02.12.22 
            ✎
    14:22 
 | 
         
        (0) 
 
        ВЫБРАТЬ Флаг, Ссылка ИЗ ТаблицаСКолонками СГРУППИРОВАТЬ ПО Флаг, Ссылка оставит сколько строк?  | 
|||
| 
    14
    
        Aleksey    
     02.12.22 
            ✎
    14:22 
 | 
         
        (11) есть выбор когда иначе     
         | 
|||
| 
    15
    
        KJlag    
     02.12.22 
            ✎
    14:24 
 | 
         
        (12) xor?     
         | 
|||
| 
    16
    
        Garykom    
     гуру 
    02.12.22 
            ✎
    14:26 
 | 
         
        (10) кстати да! или максимум     
         | 
|||
| 
    17
    
        mikecool    
     02.12.22 
            ✎
    14:27 
 | 
         
        (16) не, максимум неправильно     
         | 
|||
| 
    18
    
        Смотрящий    
     02.12.22 
            ✎
    14:27 
 | 
         
        Сгруппировать по флагу и ссылке
 
        Проверить на Количество(Ссылка) = 1 и Флаг = Истина  | 
|||
| 
    19
    
        hockeyist    
     02.12.22 
            ✎
    14:29 
 | 
         
        (16) Какой такой "или максимум"? только минимум     
         | 
|||
| 
    20
    
        hockeyist    
     02.12.22 
            ✎
    14:30 
 | 
         
        (18) Неправильно     
         | 
|||
| 
    21
    
        Garykom    
     гуру 
    02.12.22 
            ✎
    14:31 
 | 
         
        (19) (17) имеющие минимум(Флаг) = Ложь же?     
         | 
|||
| 
    22
    
        Garykom    
     гуру 
    02.12.22 
            ✎
    14:31 
 | 
         
        (21) тьфу
 
        *имеющие максимум(Флаг) = Ложь  | 
|||
| 
    23
    
        formista2000    
     02.12.22 
            ✎
    14:32 
 | 
         
        количество различные уже было?     
         | 
|||
| 
    24
    
        hockeyist    
     02.12.22 
            ✎
    14:32 
 | 
         
        (22) или максимум     
         | 
|||
| 
    25
    
        hockeyist    
     02.12.22 
            ✎
    14:32 
 | 
         
        (23) Нет еще пока     
         | 
|||
| 
    26
    
        kittystark    
     02.12.22 
            ✎
    14:33 
 | 
         
        запросы это хорошо, а если вдруг это еще и для отчета на СКД, то есть выражение ресурса ВСЕ(флаг)     
         | 
|||
| 
    27
    
        Kassern    
     02.12.22 
            ✎
    14:33 
 | 
         
        (22) вот смотрите
 
        1 Истина 1 Ложь 2 Ложь 2 Ложь 3 Истина 3 Истина В вашем случае вы выведите 2, а нужно 3  | 
|||
| 
    28
    
        hockeyist    
     02.12.22 
            ✎
    14:37 
 | 
         
        (27) Он хотел сказать: "НЕ имеющие максимум(флаг)=ложь"     
         | 
|||
| 
    29
    
        ass1c    
     02.12.22 
            ✎
    14:42 
 | 
         
        (1) + 
 
        КвалификаторыСтроки = Новый КвалификаторыСтроки(20); ОписаниеСтроки = Новый ОписаниеТипов("Строка", ,КвалификаторыСтроки); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Флаг" , Новый ОписаниеТипов("Булево")); ТЗ.Колонки.Добавить("Ссылка" , ОписаниеСтроки); НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка1"; НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка1"; НС = ТЗ.Добавить(); Нс.Флаг = Ложь; Нс.Ссылка = "Ссылка2"; НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка2"; НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка3"; НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка3"; НС = ТЗ.Добавить(); Нс.Флаг = Ложь; Нс.Ссылка = "Ссылка4"; НС = ТЗ.Добавить(); Нс.Флаг = Истина; Нс.Ссылка = "Ссылка4"; НС = ТЗ.Добавить(); Нс.Флаг = Ложь; Нс.Ссылка = "Ссылка5"; НС = ТЗ.Добавить(); Нс.Флаг = Ложь; Нс.Ссылка = "Ссылка5"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТЗ", ТЗ); // Теперь ТЗ можно использовать в запросе: Запрос.Текст = "ВЫБРАТЬ | ТЗ.Флаг КАК Флаг, | ТЗ.Ссылка КАК Ссылка |ПОМЕСТИТЬ врТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | врТЗ.Ссылка КАК Ссылка |ПОМЕСТИТЬ врНеВерные |ИЗ | врТЗ КАК врТЗ |ГДЕ | НЕ врТЗ.Флаг |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ Различные | врТЗ.Ссылка КАК Ссылка |ИЗ | врТЗ КАК врТЗ | ЛЕВОЕ СОЕДИНЕНИЕ врНеВерные КАК врНеВерные | ПО врТЗ.Ссылка = врНеВерные.Ссылка |ГДЕ | врНеВерные.Ссылка ЕСТЬ NULL"; Результат = Запрос.Выполнить().Выгрузить(); //Результат: Ссылка1, Ссылка3  | 
|||
| 
    30
    
        KJlag    
     02.12.22 
            ✎
    14:49 
 | 
         
        (23) а мне нравится твой вариант.
 
        ВЫБРАТЬ Т.Ссылка КАК Ссылка, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т.Флаг) КАК Кол, МАКСИМУМ(Т.Флаг) КАК Макс Поместить ВТ ИЗ Таблица КАК Т СГРУППИРОВАТЬ ПО Т.Ссылка а дальше то где где кол = 1 и макс = истина  | 
|||
| 
    31
    
        lodger    
     02.12.22 
            ✎
    14:56 
 | 
         
        пятнично.     
         | 
|||
| 
    32
    
        BaZZiL    
     02.12.22 
            ✎
    15:06 
 | 
         
        (29) Ура, заработало!
 
        Всех благодарю за ответы, пятниццо продолжется))!  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |