Re: lenteles formavimas is skirtingu lenteliu su virsumi

minde wrote:

Na penktadienio vakare aš labai tingiu judinti savo pilkasias lasteles, nes jos pavargo per ilgą savaitę, tai tingiu gilintis kurioje lentelėje pas tave kokie duomenys yra, o kurių nėra.

Galbūt tau reikalingas toks sprendimas: iš abieju lentelių išgauni visus įmanomus prekių kodus, gautą leikina lentelę jungi su likučių lenta ir jungi su apyvartos lenta (abu LEFT JOIN). Grupuoji pagal prekių kodus ir agreguodamas suvartai duomenis taip kaip reikia.

Dabar pas tave viskas yra agreguojama pagal apyvartų lentoje esančias prekes. Jeigu prekė ten yra, tai ataskaitoje bus įrašas. Jeigu likučiuose ji yra tai skaičiai irgi turi matytis. Jeigu nesimato - vadinasi yra KLAIDA.

man zmones sake kad cia zopa gaunasi ir reikia naudoti ir left ir right joinus, tik kazkaip protingai ismastyti ka kur pritraukti..
kuo toliau tuo labiau galva skauda nuo ju..
ka reiskia agreguoti siame kontekste? :)

Re: lenteles formavimas is skirtingu lenteliu su virsumi

up :)

Re: lenteles formavimas is skirtingu lenteliu su virsumi

majklas wrote:

up :)

O ką pats per tą laiką nuveikei?

Mano paskutinės žinutės esmė išlieka:
a) arba tu kažką suvėlei ir tai ką pateiki neatitinka tikrovvės - t.y. kažkur yra klaida - todėl pas tave nesusijungia susiję duomenys; Tada darai, kaip ir rašiau - pirma išgauni visas įmanomas prekes, o paskui sujungti tiek su apyvartom, tiek su likučiais (nes prekių lentelės tu neturi);
b) arba pas tave iš tikro yra nesusiję duomenys, kurie turi atsigulti į vieną ataskaitą; Tada darai DVI užklausas; (bet panašu, kad jie yra susiję, per prekes);

Kas dėl LEFT ir RIGHT JOIN'ų, tai tų žmonių, kurie tau patarinėja, paklausk koks gi skirtumas tarp šių dviejų sujungimo tipų?

O agregavimas yra duomenų sutraukimas-apdorojimas grupėje, kai atliekama grupavimo operacija (GROUP BY).

Re: lenteles formavimas is skirtingu lenteliu su virsumi

minde wrote:
majklas wrote:

up :)

O ką pats per tą laiką nuveikei?

Mano paskutinės žinutės esmė išlieka:
a) arba tu kažką suvėlei ir tai ką pateiki neatitinka tikrovvės - t.y. kažkur yra klaida - todėl pas tave nesusijungia susiję duomenys; Tada darai, kaip ir rašiau - pirma išgauni visas įmanomas prekes, o paskui sujungti tiek su apyvartom, tiek su likučiais (nes prekių lentelės tu neturi);
b) arba pas tave iš tikro yra nesusiję duomenys, kurie turi atsigulti į vieną ataskaitą; Tada darai DVI užklausas; (bet panašu, kad jie yra susiję, per prekes);

Kas dėl LEFT ir RIGHT JOIN'ų, tai tų žmonių, kurie tau patarinėja, paklausk koks gi skirtumas tarp šių dviejų sujungimo tipų?

O agregavimas yra duomenų sutraukimas-apdorojimas grupėje, kai atliekama grupavimo operacija (GROUP BY).

as turiu begales reikalu.. jeigu pavyktu kazkaip sita reikala greiciau isspresti butu super :)

na, klaidu kaip ir nera.. tiek PMA tiek ir php gerai viska gauna ir atvaizduoja..
tik ten kur nera iraso apyvartoje, tada pagal ta koda nerodo ir is likuciu lentos. nors taip neturetu buti.. :(
per prekiu pavadinima sujungti dvi uzklausas nepavyktu, nes skirtingose ataskaitose yra ishsaugota skirtingais vardais -> kablelio truksta, raides didziosios/mazosios..
susirisa tik per koda ir per padalinio id.
as tau galeciau sql'a atsiusti su tikrais duomenimis

Re: lenteles formavimas is skirtingu lenteliu su virsumi

majklas wrote:

as turiu begales reikalu.. jeigu pavyktu kazkaip sita reikala greiciau isspresti butu super :)

Idomu, kad tų reikalų ir darbų neturi? (-;

majklas wrote:

na, klaidu kaip ir nera.. tiek PMA tiek ir php gerai viska gauna ir atvaizduoja..

Na jeigu viską gerai atvaizduoja tai kame problema?

Jeigu tu turi omenyje, kad nėra kritinės/sintaksės klaidos, dėl kurios rodomas pranešimas ir užklausa neįvyksta, tai aš turėjau pmenyje šiek tiek kitokią - loginę klaidą.

majklas wrote:

tik ten kur nera iraso apyvartoje, tada pagal ta koda nerodo ir is likuciu lentos. nors taip neturetu buti.. :(

Tai aiškinkis, kas blogai (-;

majklas wrote:

per prekiu pavadinima sujungti dvi uzklausas nepavyktu, nes skirtingose ataskaitose yra ishsaugota skirtingais vardais -> kablelio truksta, raides didziosios/mazosios..
susirisa tik per koda ir per padalinio id.

Tai rišk per prekės kodą, tai logiška ir teisinga. Aš lygtais niekur nesiūliau rišti per prekės pavadinimą.

majklas wrote:

as tau galeciau sql'a atsiusti su tikrais duomenimis

Man nesiųsk. Aš duomenų ir SQL užklausų turiu begales. Dėk čia, kas turės noro ir laiko galės pažaist (-;

Re: lenteles formavimas is skirtingu lenteliu su virsumi

SELECT pavadinimas, kodas, akc_kaina, matas, 
MC_likutis, MC_kiekis, MC_Vid_savikaina, MC_Vid_antkainis_proc, MC_Vid_antkainis_suma,
UB_likutis, UB_kiekis, UB_Vid_savikaina, UB_Vid_antkainis_proc, UB_Vid_antkainis_suma,
KA_likutis, KA_kiekis, KA_Vid_savikaina, KA_Vid_antkainis_proc, KA_Vid_antkainis_suma,
VC_likutis, VC_kiekis, VC_Vid_savikaina, VC_Vid_antkainis_proc, VC_Vid_antkainis_suma,

MC_likutis + UB_likutis + KA_likutis + VC_likutis AS Visi_likuciai,
MC_kiekis + UB_kiekis + KA_kiekis + VC_kiekis AS Visi_kiekiai,
MC_Vid_savikaina + UB_Vid_savikaina + KA_Vid_savikaina + VC_Vid_savikaina AS Visa_savikaina,
MC_Vid_antkainis_proc + UB_Vid_antkainis_proc + KA_Vid_antkainis_proc + VC_Vid_antkainis_proc AS Visas_ant_proc,
MC_Vid_antkainis_suma + UB_Vid_antkainis_suma + KA_Vid_antkainis_suma + VC_Vid_antkainis_suma AS Visa_ant_sum
 
FROM (
SELECT apyvarta.pavadinimas AS pavadinimas,
   apyvarta.kodas AS kodas,
   apyvarta.akc_kaina as akc_kaina,
   likuciai.matas AS matas,
   MAX(IF(likuciai.padalinys = 'MC', likuciai.likutis, '0')) AS MC_likutis,
   MAX(IF(apyvarta.padalinys = 'MC', apyvarta.kiekis, '0')) AS MC_kiekis,
   MAX(IF(apyvarta.padalinys = 'MC', apyvarta.Vid_savikaina, '0')) AS MC_Vid_savikaina,
   MAX(IF(apyvarta.padalinys = 'MC', apyvarta.Vid_antkainis_proc, '0')) AS MC_Vid_antkainis_proc,
   MAX(IF(apyvarta.padalinys = 'MC', apyvarta.Vid_antkainis_suma, '0')) AS MC_Vid_antkainis_suma,
   
   MAX(IF(likuciai.padalinys = 'UB', likuciai.likutis, '0')) AS UB_likutis,
   MAX(IF(apyvarta.padalinys = 'UB', apyvarta.kiekis, '0')) AS UB_kiekis,
   MAX(IF(apyvarta.padalinys = 'UB', apyvarta.Vid_savikaina, '0')) AS UB_Vid_savikaina,
   MAX(IF(apyvarta.padalinys = 'UB', apyvarta.Vid_antkainis_proc, '0')) AS UB_Vid_antkainis_proc,
   MAX(IF(apyvarta.padalinys = 'UB', apyvarta.Vid_antkainis_suma, '0')) AS UB_Vid_antkainis_suma,
   
   MAX(IF(likuciai.padalinys = 'KA', likuciai.likutis, '0')) AS KA_likutis,
   MAX(IF(apyvarta.padalinys = 'KA', apyvarta.kiekis, '0')) AS KA_kiekis,
   MAX(IF(apyvarta.padalinys = 'KA', apyvarta.Vid_savikaina, '0')) AS KA_Vid_savikaina,
   MAX(IF(apyvarta.padalinys = 'KA', apyvarta.Vid_antkainis_proc, '0')) AS KA_Vid_antkainis_proc,
   MAX(IF(apyvarta.padalinys = 'KA', apyvarta.Vid_antkainis_suma, '0')) AS KA_Vid_antkainis_suma,
   
   MAX(IF(likuciai.padalinys = 'VC', likuciai.likutis, '0')) AS VC_likutis,
   MAX(IF(apyvarta.padalinys = 'VC', apyvarta.kiekis, '0')) AS VC_kiekis,
   MAX(IF(apyvarta.padalinys = 'VC', apyvarta.Vid_savikaina, '0')) AS VC_Vid_savikaina,
   MAX(IF(apyvarta.padalinys = 'VC', apyvarta.Vid_antkainis_proc, '0')) AS VC_Vid_antkainis_proc,
   MAX(IF(apyvarta.padalinys = 'VC', apyvarta.Vid_antkainis_suma, '0')) AS VC_Vid_antkainis_suma
   
FROM apyvarta
   LEFT JOIN likuciai ON likuciai.kodas = apyvarta.kodas 
      AND likuciai.padalinys = apyvarta.padalinys
WHERE apyvarta.savaite IN (1,2,3)
GROUP BY apyvarta.kodas
) AS LAIKINA

gal kas galetumet parasyti kaip atrodytu uzklausa kai naudoji 2 LEFT JOIN'us?
pasidariau padaliniu lentute su pad_id pad_kodas pad_pavadinimas => 1 UB Urmo baze
tik niekaip man tie max if'ai nesukrenta i galva kur jie turetu buti..

reiketu kad butu sintakse tokia:

SELECT *
FROM padaliniai
LEFT JOIN Likuciai ON padaliniai.pad_kodas=likuciai.padalinys
LEFT JOIN Apyvartos ON padaliniai.pad_kodas=apyvarta.padalinys
GROUP by apyvarta.kodas