Franco: Nachschlag

Beitrag lesen

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

0 54

Problem bei einer Query

Franco
  • datenbank
  1. 0
    suit
  2. 0
    dedlfix
    1. 0
      Franco
      1. 0
        Vinzenz Mai
        1. 0
          Franco
          1. 0
            dedlfix
            1. 0
              Franco
              1. 0
                dedlfix
                1. 0
                  Franco
                  1. 0
                    Vinzenz Mai
                    1. 0
                      Franco
                      1. 0
                        dedlfix
                        1. 0
                          Franco
                          1. 0
                            dedlfix
                            1. 0
                              Franco
                              1. 0
                                dedlfix
                                1. 0
                                  Franco
                                  1. 0

                                    Code zum Nachbasteln

                                    Franco
                                    1. 0
                                      dedlfix
                                      1. 0
                                        dedlfix
                                        1. 0
                                          Vinzenz Mai
                                        2. 0
                                          Franco
                                          1. 0
                                            Vinzenz Mai
                                            1. 0

                                              Nachschlag

                                              Franco
                                              1. 0
                                                Ilja
                                                1. 0
                                                  dedlfix
                                                  1. 0
                                                    Franco
                                                  2. 0
                                                    Ilja
                                              2. 0
                                                dedlfix
                                                1. 0
                                                  Franco
                                                  1. 0
                                                    Vinzenz Mai
                                                    1. 0
                                                      Franco
                                                  2. 0
                                                    dedlfix
                                                    1. 0
                                                      Franco
                                                      1. 0

                                                        Nachschlag, Tag 3

                                                        Franco
                                                        1. 0
                                                          dedlfix
                                                          1. 0
                                                            Franco
                                                            1. 0
                                                              dedlfix
                                                              1. 0
                                                                Franco
                                                                1. 0
                                                                  Franco
                                                                2. 0
                                                                  dedlfix
                                            2. 0
                                              Franco
                          2. 0
                            Ilja
                  2. 0
                    dedlfix
                    1. 0
                      Franco
                      1. 0
                        dedlfix
    2. 0
      Franco
      1. 0
        dedlfix
        1. 0
          Franco
          1. 0
            dedlfix
        2. 0
          Franco
          1. 0
            dedlfix
            1. 0
              Franco