select въпрос

8 отговора 795 прегледа
#1

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

Отговор
в отговор на beginner #2

Re: select въпрос

Това, което ми дойде като идея е с малко вложени заявки:


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 на

Отговор
в отговор на mr.vain #3

Благодаря за идеята,

ще я изпробвам при първа възможност и ще съобщя за резултата.

Отговор
в отговор на beginner #4

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 (Ех младост, младост наречена борба)

Отговор
в отговор на beginner #5

Re: А ако real_quant = quant ?

Тези редове пропускаш ли ги?

salle.online.bg/sig
Отговор
в отговор на salle #6

Re: А ако real_quant = quant ?

Тези ги пропускам

Отговор
в отговор на Blandings Castle #7

СУПЕР!!!

С iif(,,) работи перфектно!
Не знаех, че select може да работи с iif(,,) . Ще ми спести много време и за в бъдеще.

10хххххххх

Отговор
в отговор на бerиннep #8

Re: СУПЕР!!!

пак по спомени, в select-a можеш да си слагаш и собствени функции, писани на XBase, като параметри да им подаваш стойности от таблицата и те да си смятат и да ти връщат резултат за всеки ред от select-a (аналогично на IIF).

Отговор
в отговор на Blandings Castle #9

Благодаря за информацията!

Ще ми помогне много да си улесня живота.

Отговор