Size: a a a

2020 May 20

Дt

Дмитрий texnix 🇨🇳... in sql_ninja
источник

Дt

Дмитрий texnix 🇨🇳... in sql_ninja
нда клёвый план
источник

Дt

Дмитрий texnix 🇨🇳... in sql_ninja
в бобре
источник

NP

Nick Proskuryakov in sql_ninja
Датагрип чекни, тебе понравится)
источник
2020 May 21

ЕА

Екатерина Александро... in sql_ninja
Дрбрый день.
Помогите пожалуйста разобраться с цикличностью на терадате с помощью case
when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       when srd.QNTY>0.9 then (QNTY-0,9) и вот тут цикл должен повторятся до тех пор, пока не будет  <0,9
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Дрбрый день.
Помогите пожалуйста разобраться с цикличностью на терадате с помощью case
when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       when srd.QNTY>0.9 then (QNTY-0,9) и вот тут цикл должен повторятся до тех пор, пока не будет  <0,9
Это же часть CASE-выражения?
источник

ЕА

Екатерина Александро... in sql_ninja
Ilia Zviagin
Это же часть CASE-выражения?
Да
источник

IZ

Ilia Zviagin in sql_ninja
Тогда там нет никаких цикличностей.
Вы перечисляете условия и результат при его срабатывании.
Первое сработавшее условие формирует результат.
Если не сработало ни одно -- есть фраза ELSE.
(кстати, вам можно было бы её использовать)
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Дрбрый день.
Помогите пожалуйста разобраться с цикличностью на терадате с помощью case
when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       when srd.QNTY>0.9 then (QNTY-0,9) и вот тут цикл должен повторятся до тех пор, пока не будет  <0,9
Ну и в след. раз публикуй запрос целиком. Не надо вырезать куски, тем более так вот, из середины выражения.
источник

ЕА

Екатерина Александро... in sql_ninja
Ilia Zviagin
Тогда там нет никаких цикличностей.
Вы перечисляете условия и результат при его срабатывании.
Первое сработавшее условие формирует результат.
Если не сработало ни одно -- есть фраза ELSE.
(кстати, вам можно было бы её использовать)
Мне надо чтобы если QNTY>0,9( допустим 1,9), вычитание проводилось до остатка <0,9 и в соответствии с этим присваивалось число как в предыдущих условиях
Если qnty=1,9, то 1,9-0,9-0,9=0.1 соответственно qnty<0.3 then 0,32
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Мне надо чтобы если QNTY>0,9( допустим 1,9), вычитание проводилось до остатка <0,9 и в соответствии с этим присваивалось число как в предыдущих условиях
Если qnty=1,9, то 1,9-0,9-0,9=0.1 соответственно qnty<0.3 then 0,32
Полный запрос надо для начала.
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Мне надо чтобы если QNTY>0,9( допустим 1,9), вычитание проводилось до остатка <0,9 и в соответствии с этим присваивалось число как в предыдущих условиях
Если qnty=1,9, то 1,9-0,9-0,9=0.1 соответственно qnty<0.3 then 0,32
Надо --напиши выражение соотв. в соответствующей ветке.
Организуй условия веток так, чтобы они были взаимоисключающими.
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Дрбрый день.
Помогите пожалуйста разобраться с цикличностью на терадате с помощью case
when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       when srd.QNTY>0.9 then (QNTY-0,9) и вот тут цикл должен повторятся до тех пор, пока не будет  <0,9
Какой ещё цикл должен повторяться ?
источник

ЕА

Екатерина Александро... in sql_ninja
Ilia Zviagin
Полный запрос надо для начала.
select
w.whs_id
, case when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       --when srd.QNTY>0.9 then (QNTY-0,9)     ????                                      
                end as sale
,sum (1)  as sw
, sale* sw as massa
from
prd_vd_dm.V_POS_TXN_LINE_ITEM as srd
--join prd_vd_dm.v_art_ext as ae on srd.art_id = ae.art_id
join sales_mm.cheese  as ch on srd.ART_ID=ch.ART_ID
join prd_vd_dm.v_whs as w on w.whs_id=srd.whs_id and w.frmt_id=1 and w.working=1
where srd.day_id between '2019-07-01' and '2019-07-31'   --and w.whs_id in (4749)
group by 1,2
источник

ЕА

Екатерина Александро... in sql_ninja
Ilia Zviagin
Надо --напиши выражение соотв. в соответствующей ветке.
Организуй условия веток так, чтобы они были взаимоисключающими.
Можешь на примере объяснить пожалуйста
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Можешь на примере объяснить пожалуйста
Нечего объяснять. Всё у тебя уже написано
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Можешь на примере объяснить пожалуйста
И я таки не понимаю, что ты хочешь. Что за цикл?
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Мне надо чтобы если QNTY>0,9( допустим 1,9), вычитание проводилось до остатка <0,9 и в соответствии с этим присваивалось число как в предыдущих условиях
Если qnty=1,9, то 1,9-0,9-0,9=0.1 соответственно qnty<0.3 then 0,32
что за "вычитание проводилось до остатка" ?
источник

IZ

Ilia Zviagin in sql_ninja
Екатерина Александровна
Мне надо чтобы если QNTY>0,9( допустим 1,9), вычитание проводилось до остатка <0,9 и в соответствии с этим присваивалось число как в предыдущих условиях
Если qnty=1,9, то 1,9-0,9-0,9=0.1 соответственно qnty<0.3 then 0,32
qnty=1,9, то 1,9-0,9-0,9=0.1

напиши там математическое выражение, которое будет формировать тебе нужное число.
ЕСЛИ такое выражение написать невозможно, то это сделать нельзя.
Никаких возможностей сделать встроенный цикл в SQL не существует.

Возможно, в твоей СУБД можно использовать пользовательские функции, тогда напиши фукнцию, которая будет это делать, и возвращать значение, и используй в нужной ветке её.
источник

ЕА

Екатерина Александро... in sql_ninja
Екатерина Александровна
select
w.whs_id
, case when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
       --when srd.QNTY>0.9 then (QNTY-0,9)     ????                                      
                end as sale
,sum (1)  as sw
, sale* sw as massa
from
prd_vd_dm.V_POS_TXN_LINE_ITEM as srd
--join prd_vd_dm.v_art_ext as ae on srd.art_id = ae.art_id
join sales_mm.cheese  as ch on srd.ART_ID=ch.ART_ID
join prd_vd_dm.v_whs as w on w.whs_id=srd.whs_id and w.frmt_id=1 and w.working=1
where srd.day_id between '2019-07-01' and '2019-07-31'   --and w.whs_id in (4749)
group by 1,2
Есть
when srd.QNTY>0 and QNTY<=0.3 then 0.31
       when srd.QNTY>0.3 and QNTY<=0.6 then 0.62
       when srd.QNTY>0.6 and QNTY<=0.9 then 0.94
После каждого then число, которое дальше участвует в расчётах
Соответственно если qnty к примеру равно 2,2, то 2,2-0,9-0,9=0,4 и дальше 0,4<0,6
Qnty может быть любым, значи - 0,9
источник