|
Булева сумма или как отобрать одно значение по нескольким совпадающим полям? | ☑ | ||
---|---|---|---|---|
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) Ура, заработало!
Всех благодарю за ответы, пятниццо продолжется))! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |