2014-11-12 12 views
8

Ho la tabella seguente che sto cercando di ruotare in modo che le descrizioni nella colonna 1 diventino le intestazioni delle colonne nel nuovo pivot.La tabella pivot restituisce più righe con NULL, i risultati devono essere raggruppati su una riga

Nominal Group | GrpID | Description  | Value  | CustomerID 
---------------+-------+-----------------+-------------+----------- 
Balance Sheet | 7  | BS description | 56973.10 |  2 
Cost of Sales | 4  | COS description | 55950.17 |  2 
Sales   | 1  | Sales   | -178796.18 |  2 
Labour Costs | 5  | Wages   | 18596.43 |  2 
Overheads  | 6  | Rent   | 47276.48 |  2 

Sto utilizzando il codice sottostante per ottenere il risultato impostato al di sotto che:

select * from trialbalancegrouping 
PIVOT (Sum(value) 
for nominalgroupname in ([Sales],[Cost of Sales],[Labour Costs],[Overheads])) AS PVTtable 

-

GrpID | Description | CustomerID | Sales | Cost of Sales | Labour Costs | Overheads 
------+---------------+------------+------------+---------------+--------------+----------- 
    1 | Sales  |  2  | -178796.18 |  NULL  |  NULL |  NULL 
    2 |COS Description|  2  | NULL | 55950.17 |  NULL |  NULL 
    3 | Labour  |  2  | NULL |  NULL  | 18596.43 |  NULL 
    4 | Overheads |  2  | NULL |  NULL  |  NULL | 47276.48 

Idealmente, vorrei che l'uscita sia una riga per cliente, come questo:

CustomerID | Sales | Cost of Sales | Labour Costs | Overheads 
-----------+------------+----------------+--------------+------------ 
    2  | -178796.18 |  55950.17 | 18596.43 | 47276.48 
+0

Prego mi puoi fornire la struttura della tabella –

risposta

8

Qualsiasi colonna tha t sono disponibili passate alla funzione PIVOT, quindi tutto a parte la colonna aggregata e la colonna imperniata sono raggruppate in modo implicito, quindi dal momento che sono presenti GrpID e Description e non incluso è raggruppato da, quindi si ottiene una riga per combinazione di questi. È necessario limitare le colonne passati alla funzione di rotazione utilizzando un subquery:

SELECT pvt.CustomerID, 
     pvt.Sales, 
     pvt.[Cost of Sales], 
     pvt.[Labour Costs], 
     pvt.[Overheads] 
FROM ( SELECT CustomerID, nominalgroupname, Value 
      FROM trialbalancegrouping 
     ) AS t 
     PIVOT 
     ( SUM(Value) 
      FOR nominalgroupname IN 
       ( [Sales],[Cost of Sales], 
        [Labour Costs],[Overheads] 
       ) 
     ) AS pvt; 
+0

Sembra buono Gareth, ho appena rimosso la descrizione nel subquery e ora può portare nel maggior numero dettagli del cliente, se necessario. Grazie per l'aiuto :) – Stu412

+0

Mi spiace, dovrebbe essere 'nominalgroupname' nella subquery, non 'description'. – GarethD

+0

Nessun problema, mi ha fatto più avanti in 5 minuti di quanti ne avrei ottenuti in diverse ore! Grazie – Stu412

Problemi correlati