Cómo agrupar en una consulta de SQL Server

Rao Hammas

Estoy usando esta consulta para obtener la suma de SaleAmount para cada tipo (SOType) de facturas de venta.
Obtengo el resultado, pero el resultado no está agrupado por SOType. He intentado usar Agrupar por fuera de la consulta después de la condición where, pero obteniendo un error como

"La columna 'SaleInvoices.InvoiceID' no es válida porque no está incluida en un agregado ni en un grupo por función".

DECLARE @fromDate Datetime = '2019/05/23'
DECLARE @toDate Datetime = '2019/10/25'
DECLARE @isKpi int = '1'

SELECT (                      
  (Select Sum((Isnull(I.Quantity,0)*Isnull(I.SalePrice,0))+((Isnull(I.Quantity,0)*Isnull(I.SalePrice,0) - I.Discount) *(I.TAX/100))) 
  from ItemsSold as I 
  where I.InvoiceId= S.InvoiceID and I.InvoiceType='Sale Invoice'
  ) -
  (Select isnull(Sum((Isnull(I.Quantity,0)*Isnull(I.SalePrice,0))+((Isnull(I.Quantity,0)*Isnull(I.SalePrice,0) - I.Discount)*(I.TAX/100))),0)
  from ItemsSold as I 
  where I.InvoiceId= S.InvoiceID and I.InvoiceType='Sale Return'

  )) as Total

  ,S.SOType as SOType 

  FROM SaleInvoices AS S

  where S.OrderDate>=Convert(VARCHAR,@fromDate,111) and S.OrderDate<=Convert(varchar,@toDate,111)  

ingrese la descripción de la imagen aquí

Gordon Linoff

Quieres agregación condicional. La lógica debería verse así:

select s.SOType,                      
       sum(case when i.invoicetype = 'Sale Invoice'
                then (I.Quantity * I.SalePrice) * (1 - i.discount) * i.tax / 100.0 
                when i.invoicetype = 'Sale Return'
                then - (I.Quantity * I.SalePrice) * (1 - i.discount) * i.tax / 100.0
            end) as Total
from SaleInvoices s join
     ItemsSold i
     on i.InvoiceId= s.InvoiceID 
where s.OrderDate >= @fromDate and 
      s.OrderDate <= @toDate
group by s.SOType ;

No estoy seguro de haber obtenido la aritmética correcta.

Notas:

  • La group bycláusula define las filas que devuelve la consulta. Si quieres una fila por, SOTypeentonces quieres GROUP BY SOType.
  • Utilice funciones y comparaciones de fechas para las fechas. Es absurdo convertir una fecha en una cadena para compararla con una fecha.
  • Probablemente no necesite COALESCE()o ISNULL()manejar NULLvalores. Por lo general, las funciones de agregación las ignoran.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Cómo agrupar todos los valores por punto y coma separados en una consulta SQL

Cómo mostrar el cumplimiento de pedidos en una consulta de SQL Server 2008

¿Cómo realizar una consulta de porcentaje de similitud en SQL Server?

Cómo agrupar una tabla en SQL

¿Cómo escribir una consulta Json en SQL Server?

¿Cómo escribir una consulta en SQL Server 2000?

¿Cómo escribir una consulta en SQL Server 2000?

SQL Server: cómo ejecutar TOP antes de contar en una sola consulta

Cómo usar LIKE y NOT LIKE juntos en una consulta de SQL Server

¿Cómo puedo traducir una consulta de SQL Server a Oracle?

¿Cómo obtener la suma de una columna en SQL Server y mostrarla en una sola consulta?

Cómo agrupar la selección en una columna en Sql Server

Cómo agrupar la selección en una columna en Sql Server

¿Cómo mejorar el rendimiento de una consulta en SQL Server con una tabla con 150 millones de registros?

¿Consulta SQL para agrupar una tabla en una tabla de tablas?

¿Cómo convertir una consulta SQL con agrupar por, agregados y uniones a la consulta de Entity Framework?

Cómo escribir una consulta de combinación en SQL

¿Cómo "grupo cruzado" en una consulta de microsoft sql?

cómo escribir una consulta de búsqueda en SQL

¿Cómo "grupo cruzado" en una consulta de microsoft sql?

Cómo hacer una tabla cruzada de mi consulta para que los meses se muestren en columnas en SQL Server

¿Puedo agrupar en una consulta SQL con la función de ventana?

¿Cómo agrupar por todos los campos tablas anidadas en una consulta de unión izquierda en BigQuery?

¿Cómo agrupar por todos los campos tablas anidadas en una consulta de unión izquierda en BigQuery?

Microsoft SQL Server: cómo filtrar los resultados de una segunda consulta de la primera consulta

¿Cómo actualizar los valores de una columna con múltiples valores de una consulta en una tabla en SQL Server?

Combinar agrupar por y unirse en una consulta SQL

Cómo actualizar correctamente un valor de fecha y hora mediante una consulta dinámica en SQL Server

Cómo obtener las horas para mostrar algo como esto: 9.25 horas de una consulta en SQL Server 2012