[ Bojann @ 01.06.2004. 01:26 ] @
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?
[ snowwoman @ 01.06.2004. 08:52 ] @
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
[ broker @ 01.06.2004. 13:10 ] @
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.
[ goranvuc @ 03.06.2004. 23:22 ] @
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.