sql - varios - La tabla dinámica devuelve varias filas con NULL, los resultados se deben agrupar en una fila
sumar resultados de una consulta sql (1)
Tengo la siguiente tabla que quiero pivotar para que las descripciones en la columna 1 se conviertan en encabezados de columna en el nuevo pivote.
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
Estoy usando el siguiente código para obtener el resultado establecido a continuación que:
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, me gustaría que la salida fuera una fila por cliente, así:
CustomerID | Sales | Cost of Sales | Labour Costs | Overheads
-----------+------------+----------------+--------------+------------
2 | -178796.18 | 55950.17 | 18596.43 | 47276.48
Las columnas que están disponibles se pasan a la función PIVOT
, por lo que, aparte de la columna agregada, y la columna pivotada se agrupan implícitamente, por lo que, dado que GrpID
y Description
están presentes, y no incluidas, se agrupan por, por lo tanto, obtienes una fila por combinación de estos. Debe limitar las columnas pasadas a la función pivote utilizando una subconsulta:
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;