Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MYSQL] Sintassi CASE WHEN THEN END

    Ciao a tutti, spero possiate aiutarmi, perchè non capisco dove sto sbagliando.

    Eseguo su MySQL due query praticamente identiche tranne nel calcolo tra parametri (vedi alias output1 e output2) e nella condizione WHERE e che restituiscono entrambe gli output esatti:

    Query #1
    codice:
    SELECT 
        C.MCR_Cod
      , C.MCR_Clt
      , C.MCR_Den
      , IF(R.Art = '51M', '51M'
      , IF(R.Art = '450', 'MT', 'BT')) Origen
      , SUM(R.BT*R.sec/60/C.CLIENTIES) Output1
    FROM 
               _tbl1 R 
    INNER JOIN _tbl2 C ON 
                R.CFT_Cod = C.CFT_Cod
    WHERE 1     AND C.MCR_Cod ='DCE'
                AND R.CDI='P'
                
    GROUP BY 
                  C.MCR_Cod
                , C.MCR_clt
                , IF (R.Art = '51M', '51M'
                , IF (R.Art = '450','MT','BT'));
    Output Query #1 (Corretto)
    codice:
    MCR_Cod	MCR_Clt	MCR_Den	Origen	Output1
    DCE	9542743	DCE	51M	0,0444
    DCE	9542743	DCE	BT	2,9057
    DCE	9542743	DCE	MT	3,5561
    Query #2
    codice:
    SELECT 
        C.MCR_Cod
      , C.MCR_Clt
      , C.MCR_Den
      , IF(R.Art = '51M', '51M'
      , IF(R.Art = '450', 'MT', 'BT')) Origen
      , SUM(R.BT/C.CLIENTIES) Output2
    FROM 
               _tbl1 R 
    INNER JOIN _tbl2 C ON 
                R.CFT_Cod = C.CFT_Cod
    WHERE 1     AND C.MCR_Cod ='DCE'
                AND R.CDI In('P','B')
                
    GROUP BY 
                  C.MCR_Cod
                , C.MCR_clt
                , IF (R.Art = '51M', '51M'
                , IF (R.Art = '450','MT','BT'));
    Output Query #2 (Corretto)
    codice:
    MCR_Cod	MCR_Clt	MCR_Den	Origen	Output2
    DCE	9542743	DCE	51M	0,0284
    DCE	9542743	DCE	BT	0,0382
    DCE	9542743	DCE	MT	0,4362
    Adesso sto provando ad eseguire una query #3 (query #1 più query #2):
    Query #3
    codice:
    SELECT 
        C.MCR_Cod
      , C.MCR_Clt
      , C.MCR_Den
      , IF(R.Art = '51M', '51M'
      , IF(R.Art = '450', 'MT', 'BT')) Origen
    
      , CASE 1 WHEN R.CDI='P' THEN SUM(R.BT*R.sec/60/C.CLIENTIES) END Output1
      , CASE 2 WHEN R.CDI In('P','B') THEN SUM(R.BT/C.CLIENTIES) END Output2
    
    FROM 
               _tbl1 R 
    INNER JOIN _tbl2 C ON 
                R.CFT_Cod = C.CFT_Cod
    WHERE 1     AND C.MCR_Cod ='DCE'
                
    GROUP BY 
                  C.MCR_Cod
                , C.MCR_clt
                , IF (R.Art = '51M', '51M'
                , IF (R.Art = '450','MT','BT'));
    Output Query #3 (Sbagliato)
    codice:
    MCR_Cod	MCR_Clt	MCR_Den	Origen	Output1	Output2
    DCE	9542743	DCE	51M	null	null
    DCE	9542743	DCE	BT	2.9057	null
    DCE	9542743	DCE	MT	null	null
    Mi aspettavo questo output #3 con la query #3 (Come dovrebbe essere):
    codice:
    MCR_Cod	MCR_Clt	MCR_Den	Origen	Output1	Output2
    DCE	9542743	DCE	51M	0,0444	0,0284
    DCE	9542743	DCE	BT	2.9057	0,0382
    DCE	9542743	DCE	MT	3,5561	0,4362
    Perchè succede questo?
    Avete qualche idea da suggerirmi?

    Grazie mille
    M.A.R.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    , CASE 1 WHEN R.CDI='P' THEN ....
    , CASE 2 WHEN R.CDI In('P','B') ....
    In entrambi i casi cerchi P.

  3. #3
    Originariamente inviato da nicola75ss
    codice:
    , CASE 1 WHEN R.CDI='P' THEN ....
    , CASE 2 WHEN R.CDI In('P','B') ....
    In entrambi i casi cerchi P.
    Si grazie adesso ho capito... si è risolto sostituendo ai due CASE queste condizioni e l'output è corretto:
    codice:
      , SUM(IF(R.CDI='P', R.BT*R.sec/60/C.CLIENTIES, 0)) Output1
      , SUM(IF(R.CDI In('P','B'), R.BT/C.CLIENTIES, 0)) Output2
    Adesso ho però un altro problema, avrei bisogno di un output strutturato così, puoi aiutarmi?:
    codice:
    MCR_Cod	MCR_Clt	MCR_Den	51M	BT	MT
    DCE	9542743	DCE	0,0444	2.9057	3,5561
    
    MCR_Cod	MCR_Clt	MCR_Den	51M	BT	MT
    DCE	9542743	DCE	0,0284	0,0382	0,4362

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.