Имя: Пароль:
   
1C
 
Запрос с вложенным запросом
0 ER1337
 
14.12.17
12:48
Друзья девелоперы, здравствуйте. Подскажите, пожалуйста, как решить такую проблему. Есть динамический список, есть произвольный запрос у нему:     
     список.ПроизвольныйЗапрос = Истина;
     Список.ТекстЗапроса = "ВЫБРАТЬ
    |Справочник_ПричиныПростояОборудования.Код,
    |Справочник_ПричиныПростояОборудования.Наименование,
    |ВложенныйЗапрос.Причина,
    |ВложенныйЗапрос.ПричинаСсылка
    |ИЗ
    |Справочник.ПричиныПростояОборудования КАК СправочникПричиныПростояОборудования
    |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        ВЫБОР
    |            КОГДА КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) > 1 ТОГДА ""Да""
        |                       ИНАЧЕ ""Нет""
    |        КОНЕЦ КАК Причина,
    |        
    |        ВходимостьВКТГ.Причина.Ссылка КАК ПричинаСсылка
    |    ИЗ
    |        РегистрСведений.ВходимостьВКТГ КАК ВходимостьВКТГ
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ВходимостьВКТГ.Причина.Ссылка) КАК ВложенныйЗапрос
    |    ПО СправочникПричиныПростояОборудования.Ссылка = ВложенныйЗапрос.ПричинаСсылка";

Идея такая, есть справочник ПричиныПростоя, если по какой то записи, имеются записи в регистре ВходимостьВКТГ, то в колонку Причина должно выводится "Да", если нет записей, вывести "Нет". Однако, если записи есть, "Да" выводится, если записей нет, остается пустая ячейка, что не устраивает. Подскажите, пожалуйста, как сделать что бы и нет выводилось?

КОГДА КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) > 1 ТОГДА ""Да""
КОГДА КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) ЕСТЬ NULL ""Нет""

Так не работает
1 vicof
 
14.12.17
12:50
ЕстьNULL(ВходимостьВКТГ.Причина, "Нет причины")
2 ER1337
 
14.12.17
12:56
(1) Сделал так, теперь вообще ничего не выводит D:

    |Справочник_ПричиныПростояОборудования.Код,
    |Справочник_ПричиныПростояОборудования.Наименование,
    |ЕстьNULL(ВложенныйЗапрос.Причина, "Нет причины"),
    |ВложенныйЗапрос.ПричинаСсылка
3 toypaul
 
14.12.17
12:58
не в подзапросе надо проверять, на верхнем уровне

select case t1.f is null then 'no' else 'yes' from t left jonn t1 on t.f=f1.f
4 toypaul
 
14.12.17
12:58
t1 - подзапросом сгруппировать по f
5 ER1337
 
14.12.17
13:07
(4)
ВЫБРАТЬ
    СправочникПричиныПростояОборудования.Код,
    СправочникПричиныПростояОборудования.Наименование,
    ВЫБОР    
       КОГДА ВложенныйЗапрос.Причина > 1 ТОГДА ""Да""
       ИНАЧЕ ""НЕТ""
    КОНЕЦ,
    ВложенныйЗапрос.ПричинаСсылка

Теперь столбец вообще пуст.

ВЫБРАТЬ
    СправочникПричиныПростояОборудования.Код,
    СправочникПричиныПростояОборудования.Наименование,
        ВложенныйЗапрос.Причина,
    ВложенныйЗапрос.ПричинаСсылка

Если так, то выводит количество записей в регистре
6 Borteg
 
14.12.17
13:10
(0)    КОГДА КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) > 1 ТОГДА ""Да""
        |                       ИНАЧЕ ""Нет""
Когда нету причины то записи просто нету, тоесть даже количества нету
7 Borteg
 
14.12.17
13:11
список.ПроизвольныйЗапрос = Истина;
     Список.ТекстЗапроса = "ВЫБРАТЬ
    |Справочник_ПричиныПростояОборудования.Код,
    |Справочник_ПричиныПростояОборудования.Наименование,
    |Выбор Когда ВложенныйЗапрос.Причина Есть Null тогда "Нет" Иначе "да",
    |ВложенныйЗапрос.ПричинаСсылка
    |ИЗ
    |Справочник.ПричиныПростояОборудования КАК СправочникПричиныПростояОборудования
    |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        ВЫБОР
    |            КОГДА КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) > 1 ТОГДА ""Да""
        |                       ИНАЧЕ ""Нет""
    |        КОНЕЦ КАК Причина,
    |        
    |        ВходимостьВКТГ.Причина.Ссылка КАК ПричинаСсылка
    |    ИЗ
    |        РегистрСведений.ВходимостьВКТГ КАК ВходимостьВКТГ
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ВходимостьВКТГ.Причина.Ссылка) КАК ВложенныйЗапрос
    |    ПО СправочникПричиныПростояОборудования.Ссылка = ВложенныйЗапрос.ПричинаСсылка";
8 Borteg
 
14.12.17
13:13
(0) КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) =0  вприцнипе не может быть, там уже услвоие только на NULL надо проверять
9 ER1337
 
14.12.17
13:20
(7) Так не работает
(8) Сделал вот как

ВЫБРАТЬ
  СправочникПричиныПростояОборудования.Код,
  СправочникПричиныПростояОборудования.Наименование,
  ВложенныйЗапрос.Причина,
  ВложенныйЗапрос.ПричинаСсылка
ИЗ
  Справочник.ПричиныПростояОборудования КАК СправочникПричиныПростояОборудования
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ЕСТЬNULL(КОЛИЧЕСТВО(ВходимостьВКТГ.Причина), ""228"") КАК Причина,
           ВходимостьВКТГ.Причина.Ссылка КАК ПричинаСсылка
    ИЗ
  РегистрСведений.ВходимостьВКТГ КАК ВходимостьВКТГ
  
  СГРУППИРОВАТЬ ПО
  ВходимостьВКТГ.Причина.Ссылка) КАК ВложенныйЗапрос
  ПО СправочникПричиныПростояОборудования.Ссылка = ВложенныйЗапрос.ПричинаСсылка";


Все равно не работает
10 Borteg
 
14.12.17
13:28
(9)  ВложенныйЗапрос.Причина,  тебе вот это на null надо проверять
11 ER1337
 
14.12.17
13:32
(10)         
ВЫБРАТЬ
   СправочникПричиныПростояОборудования.Код,
   СправочникПричиныПростояОборудования.Наименование,
   ЕСТЬNULL (ВложенныйЗапрос.Причина, ""Нет""),
   ВложенныйЗапрос.ПричинаСсылка

Не работает
12 Borteg
 
14.12.17
13:32
(9) ВЫБРАТЬ
  СправочникПричиныПростояОборудования.Код,
  СправочникПричиныПростояОборудования.Наименование,
  ЕстьNull(ВложенныйЗапрос.Причина,"нет","Да"),
  ВложенныйЗапрос.ПричинаСсылка
ИЗ
  Справочник.ПричиныПростояОборудования КАК СправочникПричиныПростояОборудования
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) КАК Причина,
           ВходимостьВКТГ.Причина.Ссылка КАК ПричинаСсылка
    ИЗ
  РегистрСведений.ВходимостьВКТГ КАК ВходимостьВКТГ
  
  СГРУППИРОВАТЬ ПО
  ВходимостьВКТГ.Причина.Ссылка) КАК ВложенныйЗапрос
  ПО СправочникПричиныПростояОборудования.Ссылка = ВложенныйЗапрос.ПричинаСсылка";
13 ER1337
 
14.12.17
13:39
(12) Ну я же не совсем идиот)) Ну правда, так не работает, колонка становится вообще пустой.
14 Borteg
 
14.12.17
13:44
(13) (9) ВЫБРАТЬ
  СправочникПричиныПростояОборудования.Код,
  СправочникПричиныПростояОборудования.Наименование,
  ЕстьNull(ВложенныйЗапрос.ПричинаСсылка ,"нет","Да"),
  ВложенныйЗапрос.ПричинаСсылка
ИЗ
  Справочник.ПричиныПростояОборудования КАК СправочникПричиныПростояОборудования
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           КОЛИЧЕСТВО(ВходимостьВКТГ.Причина) КАК Причина,
           ВходимостьВКТГ.Причина КАК ПричинаСсылка
    ИЗ
  РегистрСведений.ВходимостьВКТГ КАК ВходимостьВКТГ
  
  СГРУППИРОВАТЬ ПО
  ВходимостьВКТГ.Причина) КАК ВложенныйЗапрос
  ПО СправочникПричиныПростояОборудования.Ссылка = ВложенныйЗапрос.ПричинаСсылка";
15 НЕА123
 
14.12.17
13:57
ЕСТЬNULL (ВложенныйЗапрос.Причина.Ссылка, ""Нет"")
16 1Садовник
 
14.12.17
15:23
В основном запросе попробуй вместо "ВложенныйЗапрос.Причина":

ВЫБОР
КОГДА ЕСТЬNULL(ВложенныйЗапрос.Причина, 0) = 0
ТОГДА "НЕТ"
ИНАЧЕ "ДА"
КОНЕЦ КАК Причина
17 ER1337
 
14.12.17
15:50
(16) О Великий!
Это работает, спасибо большое. +5 тысячей к карме. Теперь можно и чайку попить