none
query controllo stato (raggruppamento e controllo valore campo) RRS feed

  • Domanda

  • ho una tabla con due campi
    PIVA  | STATO
    --------------------------------------
    aaaaaa   ok
    aaaaaa   da verificare
    bbbbbb   errato
    bbbbbb   errato
    cccccc   ok
    cccccc   ok
    ccccc   ok

    dovrei realizzare una query  che

    mi desse un risultato del genere(ovvero lo stato generale di un cliente, per partita iva)
    che può essere "ok" se tutti i suoi documenti sono "ok", oppure "non ok" se almeno uno dei suoi documenti non è ok

    nel caso dell'esempio il risultato che mi aspetto il seguente

    aaaaaa  ok
    bbbbbb  non ok
    cccccc  non ok

    lunedì 10 giugno 2013 07:02

Risposte

  • Ciao Poioio,

    eccoti un esempio di quello che vuoi realizzare

    DECLARE @Table TABLE
    (
    	PIVA VARCHAR(255),
    	STATO VARCHAR(255)
    )
    
    DECLARE @Code TABLE
    (
    	Status VARCHAR(255),
    	Priority INT
    )
    
    INSERT INTO @Table (PIVA, STATO) SELECT 'aaa', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'aaa', 'da verificare'
    INSERT INTO @Table (PIVA, STATO) SELECT 'bbb', 'errato'
    INSERT INTO @Table (PIVA, STATO) SELECT 'bbb', 'errato'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    
    INSERT INTO @Code (Status, Priority) SELECT 'ok', 1
    INSERT INTO @Code (Status, Priority) SELECT 'da verificare', 2
    INSERT INTO @Code (Status, Priority) SELECT 'errato', 3
    
    
    SELECT
       	t1.PartitaIVA,	
       	t1.LivelloAllerta,
    	t2.Status
    FROM
    (
    	SELECT 
    		PIVA AS PartitaIVA,
    		MAX(Priority) AS LivelloAllerta
    	FROM @Table t1 
    	LEFT OUTER JOIN @Code t2 
    	ON t1.STATO = t2.Status
    	GROUP BY PIVA
    ) t1 LEFT OUTER JOIN @Code t2 ON t1.LivelloAllerta = t2.Priority
    WHERE 
    t1.LivelloAllerta > 1

    • Contrassegnato come risposta poioio lunedì 10 giugno 2013 12:39
    lunedì 10 giugno 2013 10:52

Tutte le risposte

  • Ciao Poioio,

    eccoti un esempio di quello che vuoi realizzare

    DECLARE @Table TABLE
    (
    	PIVA VARCHAR(255),
    	STATO VARCHAR(255)
    )
    
    DECLARE @Code TABLE
    (
    	Status VARCHAR(255),
    	Priority INT
    )
    
    INSERT INTO @Table (PIVA, STATO) SELECT 'aaa', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'aaa', 'da verificare'
    INSERT INTO @Table (PIVA, STATO) SELECT 'bbb', 'errato'
    INSERT INTO @Table (PIVA, STATO) SELECT 'bbb', 'errato'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    INSERT INTO @Table (PIVA, STATO) SELECT 'ccc', 'ok'
    
    INSERT INTO @Code (Status, Priority) SELECT 'ok', 1
    INSERT INTO @Code (Status, Priority) SELECT 'da verificare', 2
    INSERT INTO @Code (Status, Priority) SELECT 'errato', 3
    
    
    SELECT
       	t1.PartitaIVA,	
       	t1.LivelloAllerta,
    	t2.Status
    FROM
    (
    	SELECT 
    		PIVA AS PartitaIVA,
    		MAX(Priority) AS LivelloAllerta
    	FROM @Table t1 
    	LEFT OUTER JOIN @Code t2 
    	ON t1.STATO = t2.Status
    	GROUP BY PIVA
    ) t1 LEFT OUTER JOIN @Code t2 ON t1.LivelloAllerta = t2.Priority
    WHERE 
    t1.LivelloAllerta > 1

    • Contrassegnato come risposta poioio lunedì 10 giugno 2013 12:39
    lunedì 10 giugno 2013 10:52
  • perfetto, tiene conto anche della severità!

    grazie mille :-)

    lunedì 10 giugno 2013 12:39
  • You are wellcome ;)
    lunedì 10 giugno 2013 12:43