Estoy tratando de escribir una consulta SQL que seleccione algunos datos de una tabla. Los datos que quiero incluyen cuántas veces se ha vendido un artículo y el objetivo es tener columnas que indiquen cuántas veces se ha vendido el artículo en 30, 60 y 90 días. Puedo escribir 3 consultas separadas que hagan el trabajo, pero me gustaría escribir una consulta para que los datos estén todos en una tabla resultante. Esto es lo que tengo hasta ahora:
DECLARE @30daysago DATETIME = DATEADD(DAY,-30,CAST(GETDATE() AS DATE));
DECLARE @90daysago DATETIME = DATEADD(DAY,-90,CAST(GETDATE() AS DATE));
Set NOCOUNT ON
Select company_info_1 from setup
select ii.itemnum, i.itemname,i.price, d.description, count(ii.itemnum)
from invoice_itemized ii
join invoice_totals IT on it.invoice_number=ii.invoice_number
join inventory i on i.itemnum=ii.itemnum
join departments d on d.dept_id=i.dept_id
where it.datetime > @30daysago and len(ii.itemnum) >4
group by ii.itemnum, i.itemname, d.description, i.price
order by count(ii.itemnum) desc
Utilice una sola consulta con agregación condicional:
SELECT
ii.itemnum,
i.itemname,
i.price,
d.description,
COUNT(ii.itemnum) AS total,
COUNT(CASE WHEN it.datetime > DATEADD(DAY, -30, CAST(GETDATE() AS DATE))
THEN ii.itemnum END) AS 30daysago,
COUNT(CASE WHEN it.datetime > DATEADD(DAY, -90, CAST(GETDATE() AS DATE))
THEN ii.itemnum END) AS 90daysago
FROM invoice_itemized ii
INNER JOIN invoice_totals IT
ON it.invoice_number = ii.invoice_number
INNER JOIN inventory I
ON i.itemnum = ii.itemnum
INNER JOIN departments d
ON d.dept_id = i.dept_id
WHERE
LEN(ii.itemnum) > 4
GROUP BY
ii.itemnum,
i.itemname,
d.description,
i.price
ORDER BY
ii.itemnum DESC;
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
Déjame decir algunas palabras