Pivot Table

  • I run this code:

    SELECT

    Gruppo_Assegnatario,

    [100] as stato1, [101] as stato2, [102] as stato3

    FROM

    (

    select

    CASE_ID_,

    Stato,

    Gruppo_Assegnatario

    FROM TicketInevasiPerGruppoEStato

    ) AS SourceTable

    PIVOT (COUNT(CASE_ID_) FOR Stato in ([100], [101], [102])) AS PivotTable

    order by Gruppo_Assegnatario

    that extracts only zeros (columns "stato1", "stato2", "stato3"):

    Gruppo_Assegnatariostato1stato2stato3

    SDB_BE Vita Antiriciclaggio0 00

    SDB_BE Vita Assistenza clienti000

    SDB_BE Vita Emissione000

    SDB_BE Vita Gestione Rendite000

    SDB_BE Vita Liquidazioni000

    SDB_BE Vita Selezione000

    SDB_BE Vita Sinistri000

    SDB_BE Vita Tecnico comm.le000

    SDB_BE Vita Variazioni000

    SDB_FE Vita000

    SDB_GBS Liquidazioni000

    SDB_GBS Variazione000

    SDB_OP Group Life000

    SDB_OP Risparmio000

    SDB_TC Group Life000

    SDB_TC Risparmio000

    Unlike the "SourceTable":

    select

    CASE_ID_,

    Stato,

    Gruppo_Assegnatario

    FROM TicketInevasiPerGruppoEStato

    extracts

    CASE_ID_ Stato Gruppo_Assegnatario

    HD0000003736734 AssegnatoSDB_GBS Variazione

    HD0000003736739 AssegnatoSDB_GBS Variazione

    HD0000003736743 AssegnatoSDB_GBS Variazione

    HD0000003736783 AssegnatoSDB_GBS Variazione

    HD0000003736806 SospesoSDB_BE Vita Selezione

    HD0000003736815 AssegnatoSDB_BE Vita Sinistri

    HD0000003736816 AssegnatoSDB_GBS Variazione

    HD0000003736821 AssegnatoSDB_GBS Variazione

    HD0000003736840 AssegnatoSDB_GBS Variazione

    How can I get the right count in the first data mining replacing the zeros (columns "stato1", "stato2", "stato3")?

  • Why are you using 100, 101 & 102 for statos when you don't seem to have that values in your stato column?

    Luis C.
    General Disclaimer:
    Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

    How to post data/code on a forum to get the best help: Option 1 / Option 2
  • Luis Cazares (3/24/2014)


    Why are you using 100, 101 & 102 for statos when you don't seem to have that values in your stato column?

    Dear Luis,

    the issue is that the values are present as you can see from "SourceTable". Thus 100, 101 & 102 columns are mandatory in order to expose the values. Unlike the issue is why the values are always zero even thought the are record 531 in the "SourceTable".

    For instance look at (COUNT(CASE_ID_).

  • What Luis means is you're pivoting on data that doesn't exist on your test data, which is why the count is coming out as 0.

    Take a look at this:

    DECLARE @test-2 TABLE

    (

    CASE_ID_ VARCHAR(30) NOT NULL,

    Stato VARCHAR(20) NOT NULL,

    Gruppo_Assegnatario VARCHAR(50) NOT NULL

    );

    INSERT INTO @test-2 (CASE_ID_,Stato,Gruppo_Assegnatario)

    VALUES ('HD0000003736734','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736739','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736743','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736783','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736806','Sospeso','SDB_BE Vita Selezione'),

    ('HD0000003736815','Assegnato','SDB_BE Vita Sinistri'),

    ('HD0000003736816','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736821','Assegnato','SDB_GBS Variazione'),

    ('HD0000003736840','Assegnato','SDB_GBS Variazione');

    --test data

    SELECT * FROM @test-2;

    -- your query

    SELECT

    Gruppo_Assegnatario,

    [100] as stato1, [101] as stato2, [102] as stato3

    FROM

    (

    select

    CASE_ID_,

    Stato,

    Gruppo_Assegnatario

    FROM @test-2

    ) AS SourceTable

    PIVOT (COUNT(CASE_ID_) FOR Stato in ([100], [101], [102])) AS PivotTable

    order by Gruppo_Assegnatario;

    --pivot

    SELECT

    Gruppo_Assegnatario,

    Sospeso as stato1, Assegnato as stato2

    FROM

    (

    select

    CASE_ID_,

    Stato,

    Gruppo_Assegnatario

    FROM @test-2

    ) AS SourceTable

    PIVOT (COUNT(CASE_ID_) FOR Stato in (Sospeso, Assegnato)) AS PivotTable

    order by Gruppo_Assegnatario

  • I'll also recommend this as a cross-tab which helps with the readability.

    SELECTT.Gruppo_Assegnatario,

    SUM(CASE WHEN Stato = 'Sospeso' THEN 1 ELSE 0 END) AS Stato1,

    SUM(CASE WHEN Stato = 'Assegnato' THEN 1 ELSE 0 END) AS Stato2

    FROM@test-2 AS T

    GROUPBY T.Gruppo_Assegnatario;

  • Thank you. I does work. 🙂

Viewing 6 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic. Login to reply