|   |   | 
| 
 | v7: аналог функции в sql макс(а,б) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Skom 02.12.14✎ 12:37 | 
        что-то туплю под конец рабочего дня
 надо, если значение меньше 0 то вернуть 0 без кейса в зпросе sql можно так сделать? по аналогии с функцией МАКС(a1,...,aN) | |||
| 1
    
        ДенисЧ 02.12.14✎ 12:39 | 
        а чем тебе case не угодил?     | |||
| 2
    
        Skom 02.12.14✎ 12:39 | 
        (1) пока писал впосро, вспомнил про кейс)     | |||
| 3
    
        Skom 02.12.14✎ 12:40 | 
        макс(а,б)
 короче и красивее выглядит | |||
| 4
    
        zulu_mix 02.12.14✎ 12:40 | 
        max     | |||
| 5
    
        Ёпрст гуру 02.12.14✎ 12:40 | 
        select (abs(a)+a)/2     | |||
| 6
    
        ДенисЧ 02.12.14✎ 12:41 | 
        (5) А если там строки?     | |||
| 7
    
        Ёпрст гуру 02.12.14✎ 12:43 | 
        (6) >>>сли значение меньше 0  
 это строки разве ? речь же о числах, разве нет ? | |||
| 8
    
        Skom 02.12.14✎ 12:43 | 
        (5) конструкция сильно большая получается((((
 с кейсом не прокатило ругается на when < 0 | |||
| 9
    
        Skom 02.12.14✎ 12:43 | 
        у меня числа     | |||
| 10
    
        Ёпрст гуру 02.12.14✎ 12:43 | 
        ну и если строки, то кастом их кастом сперва :) 
 мли конвертом | |||
| 11
    
        Ёпрст гуру 02.12.14✎ 12:44 | 
        (8) чей то ?     | |||
| 12
    
        ДенисЧ 02.12.14✎ 12:44 | 
        (7) "аа" < "0" ?
 Не? | |||
| 13
    
        Ёпрст гуру 02.12.14✎ 12:46 | 
        (12) :)
 да числа у него, числа.. | |||
| 14
    
        Skom 02.12.14✎ 12:47 | 
        (11) потому что А  у меня - 
 $?????.????? - ($?????????????????.?????????????.???????($?????.?????????, :???????)*$?????.?????????/1000) | |||
| 15
    
        Skom 02.12.14✎ 12:47 | 
        $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000)     | |||
| 16
    
        Skom 02.12.14✎ 12:49 | 
        Сделал через кейс.
 (5) отдельное спасибо за то, что в очередной раз заставил мой мозг уйти от шаблонов) | |||
| 17
    
        Ёпрст гуру 02.12.14✎ 12:50 | 
        (15) Ну и ?
 в case тоже будет "не мало кода" :) | |||
| 18
    
        zulu_mix 02.12.14✎ 12:51 | 
        (16) так чем max c правильной группировкой не угодил     | |||
| 19
    
        Skom 02.12.14✎ 12:55 | 
        потому что не удобно
 |SELECT as ГруппировкаКод, | rtrim($групп.ГруппировкаИмя) as ГруппировкаИмя, | $Док.НефтеБаза as [Склад $Перечисления.Нефтебазы], | Ресурсы.ID as [Ресурс $Справочник.Ресурсы], | $ДокТЧ.Масса as Остаток, | Case | When $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000) < 0 Then 0 | Else $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000) | End as ОстатокЭффективный |FROM | $ДокументСтроки.ПередачаСмены as ДокТЧ |LEFT JOIN | $Справочник.Ресурсы as Ресурсы ON Ресурсы.ID = $ДокТЧ.ГСМ |INNER JOIN | $Справочник.КачествоРесурса as КачествоРесурса ON КачествоРесурса.ID = $Ресурсы.Качество |LEFT JOIN | $Справочник._КО_НастройкиОтчетов as групп ON $групп.ГруппировкаЗначение = КачествоРесурса.ID |INNER JOIN | $Документ.ПередачаСмены as Док ON Док.IDDoc = ДокТЧ.IDDoc AND $Док.НефтеБаза IN "+Условия+" |INNER JOIN | _1SJourn as Жур ON RIGHT(Жур.DATE_TIME_IDDOC, 9) = ДокТЧ.IDDoc AND | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.Closed & 1 = 1 | |||
| 20
    
        Skom 02.12.14✎ 12:55 | 
        строку 2 не смотреть
 ее там нет | |||
| 21
    
        Ёпрст гуру 02.12.14✎ 12:56 | 
        (18) :)
 ну напиши нам текст запроса, как с помощью max для таблички вида -10 23 -21 получить 0 23 0 | |||
| 22
    
        Ёпрст гуру 02.12.14✎ 12:58 | 
        (19)
 | (( $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000))+ | ( $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000)))/2 | as ОстатокЭффективный ну и ? вот без кейса.. тоже самое по длине | |||
| 23
    
        Ёпрст гуру 02.12.14✎ 12:59 | 
        ну там, abs еще не вставил :)     | |||
| 24
    
        Ёпрст гуру 02.12.14✎ 13:00 | 
        +23
 | (abs($ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000))+ | $ДокТЧ.Масса - ($ПоследнееЗначение.РезервуарыБаз.Мертвый($ДокТЧ.Резервуар, :КонДата)*$ДокТЧ.Плотность/1000))/2 | as ОстатокЭффективный | |||
| 25
    
        Skom 02.12.14✎ 13:12 | 
        согласись, с кейсом более читабельно?     | |||
| 26
    
        Skom 02.12.14✎ 13:13 | 
        если бы я через подзапрос делал, то твой вариант более короткий будет, а на таком длинном, кейс более читабельный     | |||
| 27
    
        КонецЦикла 02.12.14✎ 13:23 | меньше 0 то вернуть 0
 | |||
| 28
    
        Ёпрст гуру 02.12.14✎ 13:27 | 
        (27) сделаешь воспроизводимый тест с max для (21) ?     | |||
| 29
    
        Ёпрст гуру 02.12.14✎ 13:28 | 
        max же агрегатная функция...     | |||
| 30
    
        Ёпрст гуру 02.12.14✎ 13:28 | 
        (25) ну, просил же без case     | |||
| 31
    
        КонецЦикла 02.12.14✎ 14:14 | Через жпо можно, но зависит от контекста :)
 | |||
| 32
    
        Ёпрст гуру 02.12.14✎ 14:17 | 
        (31) ну блин, тут еще и доп колонка...
 :) в общем, можно и через коррелированный подзапрос, но..думаю это всё аутору не надо. | |||
| 33
    
        КонецЦикла 02.12.14✎ 14:18 | (32) Да, автор сам сразу не понял что ему... :) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |