with varios una sumar resultados registros promedio funciones ejemplos contar consultas consulta campos agrupar agrupamiento agrupados agrupadas sql sql-server group-by pivot

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;