sql >> Database >  >> RDS >> Sqlserver

Onderscheiden op besteldatum en producten SQL Server 2008

Voorbeeldgegevens en gewenste resultaten zouden helpen. Als je "onderscheiden door" zegt, neem ik aan dat je group by bedoelt. Let op, in de WHERE-clausule hoeft u Order.OrderDate niet te casten als u ervoor zorgt dat de tijdcomponent van uw @from &@to-params correct zijn ingesteld (om elke hele dag op te nemen). Het is nooit een goed idee om een ​​cast-bewerking toe te passen op de linkerkant van een vergelijking.

SELECT  --cast(Orders.OrderDate as date),
        Products.ProductId 
        SUM(OrderDetails.OrderDetailQuantity) AS totalOrdered,
FROM Orders 
INNER JOIN OrderDetails ON Orders.OrderId = OrderDetails.OrderId 
INNER JOIN Products ON OrderDetails.ProductId = Products.ProductId 
where Orders.OrderDate between cast(@from as date) AND cast(@to as date)
GROUP 
BY      --cast(Orders.OrderDate as date),
        Products.ProductId 


-- to illustrate:
declare @From datetime = '1/1/2000 10:30:22',
        @To datetime = '1/3/2000 9:11:31'

declare @orders table (i int, dt datetime)
insert into @orders
    values(1, '1/1/2000 8:00'),(2, '1/2/2000 10:00'), (3, '1/4/2000 3:00')


-- only returns i=2
select *
from    @orders
where dt between @From and @To

-- returns i=1 & i=2
select *
from    @orders
where dt between cast(@From as date) and cast(@To as date)



  1. Foutafhandeling met cursor in SQL

  2. CONCAT gebruiken met MySQL-triggers (fout bij ,)

  3. SQL Server Rebuild Index Query

  4. Vul ontbrekende rijen in bij aggregatie over meerdere velden in Postgres