Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

dodavanje nule sql upitu

[es] :: Baze podataka :: dodavanje nule sql upitu

[ Pregleda: 4449 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bojann
Zrenjanin

Član broj: 13255
Poruke: 217
*.ptt.yu



Profil

icon dodavanje nule sql upitu01.06.2004. u 01:26 - pre 241 meseci
Problem je u sledecem:
Imam 1 tabelu sa sledecimm poljima: id,ime, datum, mesec, prihod
I neka su (radi lakseg objasnjenja) uneti sledeci podaci

1 pera 21.3.2004 mart 1500
2 pera 24.3.2004 mart 2300
3 pera 25.5.2004 maj 4800
4 sima 24.4.2004 april 3600

Upit treba da mi sabere prihode grupisuci ih po mesecu za izabrano ime. E sad za ime pera on izbacuje

mart 3800
maj 4800

Problem je u tome sto ja zelim da mi on izbaci i za april iako nije uneto nista, dakle da upit izgleda ovako

mart 3800
APRIL 0
maj 4800

Kako to da dodam ako ne postoji u bazi?
 
Odgovor na temu

snowwoman
Katarina Macko
Novi Sad

Član broj: 20897
Poruke: 17
195.252.81.*



Profil

icon Re: dodavanje nule sql upitu01.06.2004. u 08:52 - pre 241 meseci
Ako je u pitanju SQL server, ovo je odgovarajuci upit:

select distinct a.mesec,
(select isnull(sum(b.prihod),0) from Prihod b
where b.mesec=a.mesec and b.ime='pera') as ukupan_prihod
from Prihod a


gde je Prihod tvoja tabela. Jedini problem ovde je sto neces dobiti podatke sortirane po redosledu dolaska meseca u godini, i ako se neki mesec nije ni jednom pojavio u tabeli Prihod, neces imati podatak za njega. Da bi resio taj problem mozes u polje mesec staviti broj od 1 do 12 kao redni broj meseca u godini, a u novu tabelu Mesec(mesecID tinyint, naziv varchar(15)) staviti nazive meseci i njihov redni broj u godini. U tom slucaju upit bi izgledao ovako:

select m.mesec,
(select isnull(sum(p.prihod),0) from Prihod p
where p.mesecID=m.mesecID and p.ime='pera') as ukupan_prihod
from Mesec m
order by m.mesecID


Nadam se da ti je ovo pomoglo :)

Pozdrav
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: dodavanje nule sql upitu01.06.2004. u 13:10 - pre 241 meseci
Evo kako bi to trebalo po skolski. Prvo, struktura podataka (i primeri):

Code:

CREATE TABLE `meseci` (
  `id_meseca` tinyint(2) default '0',
  `naziv` varchar(10) default '0'
) ENGINE=MyISAM;
INSERT INTO meseci (id_meseca, naziv) VALUES("1", "januar");
INSERT INTO meseci (id_meseca, naziv) VALUES("2", "februar");
INSERT INTO meseci (id_meseca, naziv) VALUES("3", "mart");
INSERT INTO meseci (id_meseca, naziv) VALUES("4", "april");
INSERT INTO meseci (id_meseca, naziv) VALUES("5", "maj");
INSERT INTO meseci (id_meseca, naziv) VALUES("6", "jun");
INSERT INTO meseci (id_meseca, naziv) VALUES("7", "jul");
INSERT INTO meseci (id_meseca, naziv) VALUES("8", "avgust");
INSERT INTO meseci (id_meseca, naziv) VALUES("9", "septembar");
INSERT INTO meseci (id_meseca, naziv) VALUES("10", "oktobar");
INSERT INTO meseci (id_meseca, naziv) VALUES("11", "novembar");
INSERT INTO meseci (id_meseca, naziv) VALUES("12", "decembar");

CREATE TABLE `prihodi` (
  `id_radnika` tinyint(3) unsigned NOT NULL default '0',
  `datum_placanja` date default '0000-00-00',
  `iznos` int(10) default '0'
) ENGINE=MyISAM;
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-03-21", "3000");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-03-21", "4000");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("3", "2004-03-21", "3500");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-04-21", "3100");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-04-21", "3900");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("1", "2004-05-21", "3800");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("3", "2004-05-21", "4200");
INSERT INTO prihodi (id_radnika, datum_placanja, iznos) VALUES("2", "2004-06-21", "2800");

CREATE TABLE `radnici` (
  `id_radnika` tinyint(3) default '0',
  `naziv` varchar(15) default '0'
) ENGINE=MyISAM;
INSERT INTO radnici (id_radnika, naziv) VALUES("1", "pera");
INSERT INTO radnici (id_radnika, naziv) VALUES("2", "mika");
INSERT INTO radnici (id_radnika, naziv) VALUES("3", "laza");



Iz ovoga se sledecim upitom dobija pregled zbira prihoda za sve radnike i sve mesece po radnicima.

Code:

SELECT 
  r.id_radnika, r.naziv,
    m.id_meseca, m.naziv as mesec,
    SUM(p.iznos)
FROM radnici r, meseci m
LEFT JOIN prihodi p on (MONTH(p.datum_placanja) = m.id_meseca) and p.id_radnika = r.id_radnika
GROUP BY id_radnika, id_meseca
ORDER BY id_radnika, id_meseca


Ako ti treba izvestaj samo za jednog radnika, samo dodaj filter u WHERE uslov.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: dodavanje nule sql upitu03.06.2004. u 23:22 - pre 241 meseci
Moze i ovako:

SELECT NazivMeseca, ISNULL(UkupanPrihod, 0) FROM
(SELECT 1 AS MesecRB, 'Januar' AS NazivMeseca UNION
SELECT 2, 'Februar' UNION
SELECT 3, 'Mart UNION
SELECT 4, 'April' UNION
SELECT 5, 'Maj' UNION
SELECT 6, 'Jun' UNION
SELECT 7, 'Jul' UNION
SELECT 8, 'Avgust' UNION
SELECT 9, 'Septembar' UNION
SELECT 10, 'Oktobar' UNION
SELECT 11, 'Novembar' UNION
SELECT 12, 'Decembar') AS Meseci
LEFT JOIN
(SELECT MONTH(Datum) AS MesecRB, SUM(Prihod) AS UkupanPrihod FROM TvojaTabela WHERE Ime = 'pera' GROUP BY MONTH(Datum)) AS MesecniPrihodiPere ON Meseci.MesecRB = MesecniPrihodiPere.MesecRB
ORDER BY Meseci.MesecRB

Naravno, sve ovo vazi za MS SQL Server.
 
Odgovor na temu

[es] :: Baze podataka :: dodavanje nule sql upitu

[ Pregleda: 4449 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.