Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Различава се по дата на поръчка и продукти SQL Server 2008

Примерни данни и желани резултати биха помогнали. Когато казвате "различен по", предполагам, че имате предвид групиране по. Забележете, че в клаузата WHERE не е необходимо да прехвърляте Order.OrderDate, ако се уверите, че времевият компонент на вашите параметри @from &@to е зададен правилно (за да включва всеки цял ден). Никога не е добра идея да се прилага операция за прехвърляне към лявата страна на сравнение.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 7645 Нулев или празен предикат на пълен текст

  2. Създайте функция с таблично стойности с множество оператори (MSTVF) в SQL Server

  3. 6 проблемни заявки, които значително забавят вашата база данни

  4. Има ли функция като isdate() за datetime2?

  5. Защо създавате изглед в база данни?