【问题标题】:Distinct by order date and products SQL Server 2008按订单日期和产品区分 SQL Server 2008
【发布时间】:2012-05-04 19:49:02
【问题描述】:

这是我在这里的第一篇文章,所以如果我被误认为我的帖子和英语,我说抱歉:)

我已经在谷歌做研究了,不幸的是直到现在我都无法解决这个问题。

这是我的问题,按日期显示每个产品的总订单,我想按产品区分

这是我的查询示例

SELECT Orders.OrderDate
          ,SUM(OrderDetails.OrderDetailQuantity) AS totalOrdered
          ,Products.ProductId 
FROM Orders 
INNER JOIN OrderDetails ON Orders.OrderId = OrderDetails.OrderId 
INNER JOIN Products ON OrderDetails.ProductId = Products.ProductId 
GROUP BY Orders.OrderId
          ,Orders.OrderDate
          ,Products.ProductId 
HAVING (CONVERT(VARCHAR,  Orders.OrderDate, 23) BETWEEN @from AND @to)

现在,我想根据 OrderDate 之间的产品来区分,我知道这里的大问题是 DATE,但我不知道如何通过此查询区分日期。

请帮助我。谢谢。

P.S.:如果你想在 linq 表达式中解决这个问题,它会被高度接受:)

【问题讨论】:

    标签: linq sql-server-2008


    【解决方案1】:

    样本数据和预期结果会有所帮助。当你说“distinct by”时,我假设你的意思是 group by。请注意,在 WHERE 子句中,如果您确保 @from 和 @to 参数的时间组件设置正确(包括每一天),则不需要强制转换 Order.OrderDate。在比较的左侧应用强制转换操作绝不是一个好主意。

    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)
    

    【讨论】:

    • 是的,这是正确的,但我不想显示 OrderDate 列,所以我可以轻松地按产品分组.. 感谢您的回复先生 :)
    • 最终结果应该是什么样子?只有两列 ProductId 和 totalOrdered ?
    • 是的,先生,这就是我想要展示的内容.. 但我们知道我们需要按 OrderDate 分组,以便我们可以按日期之间进行过滤..
    • 你不需要选择 OrderDate 来分组。同样,您无需按 OrderDate 分组即可对其进行过滤。
    • 是的先生,我明白你的意思了.. 我的问题是我想得到每个产品的总数量.. 在 OrderDate(from to to) 的范围内
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多