select въпрос
8 отговора
795 прегледа
select въпрос
Имам следните две таблици:
data:
-----------------------------------------------
cat_id | item_id | quant | real_quant |
-----------------------------------------------
и category:
-----------------------
cat_id | category |
-----------------------
Въпросът ми е: може ми с една заявка да получа следната таблица:
------------------------------
cat_id | lipsa | izlishak |
------------------------------ ,
като:
lipsa = sum(real_quant - quant) where real_quant < quant
izlishak = sum(real_quant - quant) where real_quant > quant
Забележка: работя с FoxPro
data:
-----------------------------------------------
cat_id | item_id | quant | real_quant |
-----------------------------------------------
и category:
-----------------------
cat_id | category |
-----------------------
Въпросът ми е: може ми с една заявка да получа следната таблица:
------------------------------
cat_id | lipsa | izlishak |
------------------------------ ,
като:
lipsa = sum(real_quant - quant) where real_quant < quant
izlishak = sum(real_quant - quant) where real_quant > quant
Забележка: работя с FoxPro
Re: select въпрос
Това, което ми дойде като идея е с малко вложени заявки:
Използвал съм само DATA таблицата. Както си го задал, няма смисъл да се JOIN-ва с CATEGORY.
Ако някой има други идеи, ще е добре да ги сподели.
SELECT
cat_id,
(
SELECT
SUM(real_quant - quant)
FROM test.data tt
WHERE real_quant < quant
AND tt.cat_id = t.cat_id
GROUP BY cat_id
) AS lipsa,
(
SELECT
SUM(real_quant - quant)
FROM test.data tt
WHERE real_quant > quant
AND tt.cat_id = t.cat_id
GROUP BY cat_id
) AS izlishak
FROM test.data t GROUP BY cat_id
Използвал съм само DATA таблицата. Както си го задал, няма смисъл да се JOIN-ва с CATEGORY.
Ако някой има други идеи, ще е добре да ги сподели.
Редактирано от mr.vain на
Re: select въпрос
Имам някакъв бегъл спомен, че във FoxPro имаше финкциия iif с която би могло да се направи следното
select cat_id,
sum(iif(real_quant < quant, real_quant - quant,0)) as lipsa,
sum(iif(real_quant > quant , real_quant - quant,0)) as izlishak
from data
group by cat_id
Това поне работеше в DOS версията на FoxPro (Ех младост, младост наречена борба)
select cat_id,
sum(iif(real_quant < quant, real_quant - quant,0)) as lipsa,
sum(iif(real_quant > quant , real_quant - quant,0)) as izlishak
from data
group by cat_id
Това поне работеше в DOS версията на FoxPro (Ех младост, младост наречена борба)
СУПЕР!!!
С iif(,,) работи перфектно!
Не знаех, че select може да работи с iif(,,) . Ще ми спести много време и за в бъдеще.
10хххххххх
Не знаех, че select може да работи с iif(,,) . Ще ми спести много време и за в бъдеще.
10хххххххх
Re: СУПЕР!!!
пак по спомени, в select-a можеш да си слагаш и собствени функции, писани на XBase, като параметри да им подаваш стойности от таблицата и те да си смятат и да ти връщат резултат за всеки ред от select-a (аналогично на IIF).