Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Phân biệt theo ngày đặt hàng và sản phẩm SQL Server 2008

Dữ liệu mẫu và kết quả mong muốn sẽ hữu ích. Khi bạn nói "khác biệt bởi" tôi cho rằng bạn muốn nói đến nhóm theo. Lưu ý, trong mệnh đề WHERE, bạn không cần truyền Order.OrderDate nếu bạn đảm bảo rằng thành phần thời gian của thông số @from &@to của bạn được đặt chính xác (bao gồm cả ngày). Không bao giờ là một ý tưởng hay nếu áp dụng phép toán ép kiểu cho phía bên trái của phép so sánh.

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. Cách bật Truy vấn phân tán trong Ad Hoc

  2. Sử dụng biểu thức chính quy trong một thủ tục được lưu trữ

  3. Tạo một chuỗi nhị phân gồm các số không, với độ dài thay đổi

  4. Làm cách nào để tạo khoảng cách phút giữa hai ngày trong T-SQL?

  5. @@ TEXTSIZE trong SQL Server là gì?