Pereiti prie turinio

Pagalbos su SQL užklausos rašymu


Rekomenduojami pranešimai

Sveiki,

 

DB turiu dvi lenteles:

 

1. Prekes

2. ParduotosPrekes

 

1-je lentelėje yra toki stulpeliai: id, PrekesPavad, Kiekis, Kaina.

2-je lentelėje yra toki stulepliai: PardavId, PrekesPavad, KiekisParduotu.

 

Noriu išvesti visas prekes, naudoju tokią užklausą:

 

$query = "SELECT * FROM Prekes";

 

Išveda visas prekes, tačiau aš noriu padaryti, kad išvedant prekę būtų atsižvelgta į 2-os lentelės stuleplį "KiekisParduotu". T.y. kad kiekis parduotų prekių būtų minusuojamas iš 1-os lentelės kiekio.

 

 

PVZ:

Prekes

1. Stalas

Kaina: 15 Lt

Kieks: 2

 

2. Lenta

Kaina: 13 Lt

Kiekis: 20

 

ParduotosPrekes

1. Lenta

Kiekis: 3

 

Pagal mano pateiktą užklausą dabar išveda:

1. Stalas

Kaina: 15 Lt

Kieks: 2

 

2. Lenta

Kaina: 13 Lt

Kiekis: 20

 

Aš noriu gauti:

1. Stalas

Kaina: 15 Lt

Kieks: 2

 

2. Lenta

Kaina: 13 Lt

Kiekis: 17

 

Kaip parašyti tokią užklausą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bijau sumeluoti, bet kažkas panašaus turėtų būti, jei suveiks

 

select p.PrekesPavad, (p.kiekis-pp.KiekisParduotu) as kiekis , p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

 

Dėl paryškintos vietos nežinau ar taip užsirašo atimtis

Redagavo Plutonium
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kam tau dvi lentos? :) Darai vienoj lentoj, tik pridedi stulpelius: Turimas kiekis, parduotas kiekis ir t.t. :)

Ir nereikės nieko joininti :)

 

select a.PrekesPavad, a.Kiekis - b.KiekisParduotu

from 1lenta a

left join 2lenta b on a.ID = b.PardavId

Redagavo Lietuviškai
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kam tau dvi lentos? :) Darai vienoj lentoj, tik pridedi stulpelius: Turimas kiekis, parduotas kiekis ir t.t. :)

Ir nereikės nieko joininti :)

 

select a.PrekesPavad, a.Kiekis - b.KiekisParduotu

from 1lenta a

left join 2lenta b on a.ID = b.PardavId

 

Reikia dviejų lentelių, nes čia tik kaip pvz sutrumpintai parašiau, o ten jose dar visko yra, kaip pvz pardavimo vieta, pirkėjas, atsiskaitymo būdas ir pan.

 

Dabar dėl kodo kurį parašei, jis veikia, apskaičiuoja kiekį, tačiau apskaičiuoja kiekį, tik ant parduotų prekių, pvz yra kitos prekės, kurios nebuvo nupirkos tai prie jų neišveda nieko. Išveda "sumažintą" skaičių tik prie parduotų prekių.

 

Bijau sumeluoti, bet kažkas panašaus turėtų būti, jei suveiks

 

select p.PrekesPavad, (p.kiekis-pp.KiekisParduotu) as kiekis , p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

 

Dėl paryškintos vietos nežinau ar taip užsirašo atimtis

 

 

Pas Tave irgi išveda tačiau: tačiau apskaičiuoja kiekį, tik ant parduotų prekių, pvz yra kitos prekės, kurios nebuvo nupirkos tai prie jų neišveda nieko. Išveda "sumažintą" skaičių tik prie parduotų prekių

Nuoroda į pranešimą
Dalintis kituose puslapiuose

select p.PrekesPavad, decode(pp.KiekisParduotu, null, p.kiekis, p.kiekis-pp.KiekisParduotu) as kiekis , p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

 

decode suveiks taip: jei parduotu yra null, tuomet rodom kiek yra išviso prekių, jei yra kažkas, tuomet minusuotą kiekį :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

select p.PrekesPavad, decode(pp.KiekisParduotu, null, p.kiekis, p.kiekis-pp.KiekisParduotu) as kiekis , p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

 

decode suveiks taip: jei parduotu yra null, tuomet rodom kiek yra išviso prekių, jei yra kažkas, tuomet minusuotą kiekį :)

 

Išvada tokią klaidą:

Incorrect parameter count in the call to native function 'decode'

 

Įdėjau skliaustus dabar išveda tokią klaidą:

#1241 - Operand should contain 1 column(s)

select p.PrekesPavad, decode(   (   pp.KiekisParduotu, null, p.kiekis   )   , p.kiekis-pp.KiekisParduotu) as kiekis , p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

Redagavo liksas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ups, pasirodo MySQL neturi decode :D aš ant Oracle visada dirbum tai maniau kad tiks :) Bet tuomet gali mėginti kažką kaip

select CASE job_lvl

WHEN 1 THEN 'level 1

WHEN 2 THEN 'level 2'

ELSE 'Unknown level' end

from employee where job_id>0 ;

 

kas atrodytų

 

select p.PrekesPavad,

CASE pp.kiekisparduotu

when null then p.kiekis

else p.kiekis, p.kiekis-pp.KiekisParduotu end,

p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

 

arba

 

 

select p.PrekesPavad,

if (pp.kiekisparduotu=null,p.kiekis,p.kiekis-pp.KiekisParduotu) as kiekis,

p.kaina from prekes p left outer join parduotosprekes pp pp.PrekesPavad=p.PrekesPavad

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...