|
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) Да, автор сам сразу не понял что ему... :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |