Hallo Vinzenz,
danke für die Hilfe. Ihc habe auch verstanden, was Du meinst, habe mich aber nun gegen die Subselect-Lösunbg entschieden, weil die andere für mich persönlich irgendwie "lesbarer" ist.
Nun aber noch ein kleiner nachschlag, denn das war je mein eigentliches Grundproblem:
SELECT
Monat,
sum(Menge*Preis*
(CASE WHEN multi = 'ja' THEN 1
WHEN multi = '100' THEN 1
WHEN multi = '200' THEN 2
WHEN multi = 'nein' THEN 0
WHEN ISNULL(multi) THEN 1 END) *(1-rabatt) ) AS count
FROM tmp
LEFT JOIN ausgaben ON Monat = FROM_UNIXTIME(Unixstamp, '%Y|%m') AND
Unixstamp != "" AND
Status = 'qq' AND
loesch != 1 AND
FROM_UNIXTIME(Unixstamp) > NOW() - INTERVAL 1 YEAR
GROUP BY Monat DESC
Diese Query spuckt mir völlig "unsinnige" Werte raus, die definitiv nicht stimmen können.
Ich möchte aber die monatlich summierten Ausgaben im Sinne von Menge*Preis*multi*(1-Rabatt) haben.
Habe ich da irgend etwas missverstanden?
Denn (Lernerfolg des Threads, ich liefere Testcode mit - Nachteil, ich liefere den funktionierenden Code) hier funktioniert das einwandfrei:
CREATE TEMPORARY TABLE `tmp` (
`ID` INT( 2 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Monat` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM ;
INSERT INTO `tmp` (`ID`, `Monat`) VALUES
(1, '2010|10'),
(2, '2010|09'),
(3, '2010|08'),
(4, '2010|07'),
(5, '2010|06');
CREATE TEMPORARY TABLE meinetabelle (
ID int(10),
Unixstamp varchar (10) NOT NULL,
`loesch` INT( 1 ) NOT NULL ,
`Status` VARCHAR( 10 ) NOT NULL,
`betrag` DECIMAL( 10,2 ) NOT NULL,
`multi` DECIMAL( 10,2 ) NOT NULL
);
INSERT INTO meinetabelle VALUES
(1, UNIX_TIMESTAMP(NOW()),'0','1','10','ja'),
(2, UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH),'0','2','20','100'),
(3, UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH),'0','1','30','ja'),
(4, UNIX_TIMESTAMP(NOW() - INTERVAL 3 MONTH),'0','3','40','100');
SELECT Monat,
sum(betrag*
(CASE WHEN multi = '100' THEN 1
WHEN multi = 'ja' THEN 1
WHEN multi = 'nein' THEN 0
WHEN ISNULL(multi) THEN 1 END)) AS count
FROM tmp
LEFT JOIN meinetabelle ON Monat = FROM_UNIXTIME(Unixstamp, '%Y|%m')
AND
FROM_UNIXTIME(Unixstamp) > NOW() - INTERVAL 1 YEAR
GROUP BY Monat DESC;
Was mach ich im unteren Beispiel denn soviel besser, dass das äluft und das obige Unsinn ausgibt?
Grüße, Frank