Tema: Re: SQL klausimas
Autorius: BigM
Data: 2012-02-20 14:04:47
Čia ne tai. Tokia ataskaita vadinama matricinė ataskaita.

Į apačią (eilutės) eina pavardės, o į dešinę (stulpeliai) - operacijų rūšys. 
Celė (eilutės ir stulpelio sankirta) yra apskaičiuota norima reikšmė 
(kiekis, suma ir pan.).

Su paprastu select'u, nesu tikras ar išgausi, nebent gal galima panaudoti 
kažkokias analitines funkcijas (šito jau nežinau). Bet tikrai žinau, kad 
darant ataskaitą kiek anksčiau teko matyti, tai daromos dvi atskiros 
užklausos, o paskui pagal nustatytą raktą (šiuo atveju būtų pavardė) yra tos 
dvi užklausos "sukryžminamos" taip gaunant dinaminę matricą.

Kitas variantas, labai primityvus ir nelankstus. Jei žinai, kad operacijų 
rūšys yra fiksuotos ir nelabai dažnai kis, tai darai užklausą iš asmenų, o 
po to per sub-select'us kiekvienai operacijos rūšiai apskaičiuoji to asmens 
atliktą skaičių. Sintaksė daug maž tokia:

select pavarde,
select count(1) from operacijos op where op.pavarde = o.pavarde and op.rusis 
= 1 as op_1,
select count(1) from operacijos op where op.pavarde = o.pavarde and op.rusis 
= 2 as op_2
....
select count(1) from operacijos op where op.pavarde = o.pavarde and op.rusis 
= n as op_n
from operatoriai o

ir taip tokių subselect'ų pridaugini kiek turi operacijų rūšių.

"VaidasB" <vaidas@nomail.com> wrote in message 
news:jht4u3$g40$1@trimpas.omnitel.net...
> nu tai darai JOIN (inner, left, pagal poreikį) tas dvi lentas pagal 
> PavardeId,
> ir select lenta1.Pavarde, Lenta1.OpNR1, lenta2.Op2
>
> On 20/02/2012 11:23, Anon wrote:
>> Newsų formatavimas truputį iškraipė :-\
>>
>> "Anon" wrote in message news:jht3bv$dn1$1@trimpas.omnitel.net...
>>
>> Pavarde Op. Nr.1 skaicius | Pavardė Op. Nr.2 skaicius
>> ...
>> Jonaitis 25 | Jonaitis
>> 36
>> Petraitis 24 | Petraitis
>> 28
>> Antanaitis 25 | Antanaitis
>> 30
>>
>> Turi gautis:
>>
>> Pavardė Op. Nr.1 skaicius Op. Nr.2 skaicius ...
>> Jonaitis 25 36
>> Petraitis 24 28
>> Antanaitis 25 30
>>
>> Vytautas
>>
>> "VaidasB" wrote in message news:jht2it$cli$1@trimpas.omnitel.net...
>>
>> nupiešk lenteles su pavyzdžiais, a tai nesuprantu kodėl UNION neveikia.
>> UNION ALL gal bandyk
>>
>> On 20/02/2012 11:03, Anon wrote:
>>> Prisireikė apjungti keleto užklausų rezultatus MySQL ataskaitoje. Visos
>>> užklausos grąžina du stulpelius: pavardžių sąrašą ir jų atliktų
>>> operacijų kiekį. Užklausose skiriasi tik vienas parametras WHERE dalyje.
>>> Klausimas: kaip tą patį atlikti su viena užklausa, kad pavardžių
>>> stulpelis liktų vienas, o skirtingų operacijų stulpeliai po to pavardžių
>>> stulpelio? Tikiuosi suprantamai paaiškinau :) UNION su dviem SELECT
>>> sakiniais neveikia - tik pirmo SELECT rezultatą matau.
>>>
>>> Vytautas
>>