/ / Problemas con agrupar y ordenar por - sql, sql-server

Problemas con agrupar por y ordenar por - sql, sql-server

Hola, soy un novato en el mundo de sql, pero estoy luchando para que funcionen algunos de los conceptos básicos.

Tengo un conjunto de datos que se parece a esto:

Table name: Sample
PROJECT      WORK ORDER      AMOUNT
-----------------------------------------
111             a             100
222             b             200
111             c             300
444             d             400
111             e             500
666             f             600

Quiero que termine luciendo así:

Table name: Sample
PROJECT      WORK ORDER      AMOUNT     PROJECT AMOUNT
--------------------------------------------------------
111             e             500           900
111             c             300           900
111             a             100           900
666             f             600           600
444             d             400           600
222             b             200           200

Ordenado por proyecto con la mayor cantidad TOTAL

Agrupar por no me funciona porque agrupa todos los proyectos en uno, por lo que no puedo ver las 3 líneas de orden de trabajo para el "Proyecto 111".

PROJECT      WORK ORDER      AMOUNT
-----------------------------------------
111             a             900
222             b             200
444             d             400
666             f             600

Ordenar por no funciona porque no puedo resolverlo según el mayor valor del proyecto.

Table name: Sample
PROJECT      WORK ORDER      AMOUNT
-----------------------------------------
666             f             600
111             e             500
444             d             400
111             c             300
222             b             200
111             a             100

Mi idea alternativa era si podía crear otrocolumna "Monto del proyecto" que calcula el total del proyecto en función de los valores de la columna "Proyecto" y luego puedo ordenarlo fácilmente por Monto del proyecto para lograr el formato deseado

Table name: Sample
PROJECT      WORK ORDER      AMOUNT     PROJECT AMOUNT
--------------------------------------------------------
111             e             500           900
111             c             300           900
111             a             100           900
666             f             600           600
444             d             400           600
222             b             200           200

Pero estoy luchando por cómo obtener la columna "Cantidad del proyecto" para calcular el valor total de todos los proyectos y presentarlos en cualquier fila que aparezca con el mismo número de proyecto.

¿Algún consejo?

Respuestas

4 para la respuesta № 1
select  *
,       sum(amount) over (partition by project) as ProjAmount
,       row_number() over
from    YourTable
order by
ProjAmount desc

Ejemplo en SQL Fiddle.


Para seleccionar solo los dos proyectos principales con las cantidades más altas, puede usar dense_rank:

select  *
from    (
select  *
,       dense_rank() over (order by ProjAmount desc) as dr
from    (
select  *
,       sum(amount) over (partition by project) as ProjAmount
from    YourTable
) WithProjAmount
) WithDenseRank
where   dr < 3
order by
ProjAmount desc

Ejemplo en SQL Fiddle.


1 para la respuesta № 2

Una versión con subconsulta SQL simple

SELECT s.*,
(SELECT SUM(Amount) FROM Sample WHERE Project = s.Project) ProjectAmount
FROM Sample s
ORDER BY ProjectAmount DESC

SQLFiddle


0 para la respuesta № 3
SELECT  a.project ,
a.work  ,
a.amount ,
b.proj_amount
FROM    project A
JOIN ( SELECT   SUM(amount) proj_amount ,
project
FROM     project
WHERE    project = project
GROUP BY project
) b ON a.project = b.project
ORDER BY proj_amount DESC ,
amount DESC