SQL查询,用于查找每周每一天为项目订购的每个类别中的单位

SQL查询,用于查找每周每一天为项目订购的每个类别中的单位,sql,sql-server,tsql,group-by,pivot,Sql,Sql Server,Tsql,Group By,Pivot,以下是我需要的详细信息: 查找过去7天内每周每一天订购的每个类别的单元。 --输出为: 查找每个客户在每个日期至少下两个订单的第二早订单号 我还想为这些表开发带有映射的ER模型。为了开发具有基数的ER模型,我认为:1项-->可以有1个或多个订单 1订单-->只能有一个项目(根据架构) 请验证模型基数是否正常 我尝试使用case语句查找SQL server查询 模式: 命令 order_id varchar(20) composite primary key customer_id numeric

以下是我需要的详细信息:

  • 查找过去7天内每周每一天订购的每个类别的单元。 --输出为:
  • 查找每个客户在每个日期至少下两个订单的第二早订单号

    我还想为这些表开发带有映射的ER模型。为了开发具有基数的ER模型,我认为:1项-->可以有1个或多个订单 1订单-->只能有一个项目(根据架构) 请验证模型基数是否正常

  • 我尝试使用case语句查找SQL server查询

    模式:

    命令

    order_id varchar(20) composite primary key
    customer_id numeric(35,0)
    order_datetime timestamp
    item_id varchar(10) composite primary key
    order_quantity numeric(35,0)
    
    订单样本摘录

    order_id | customer_id | order_datetime | item_id | order_quantity
    A-001    | 32483       | 2018-12-15 09:15:22 | B000 | 3                 
    A-005    | 21456       | 2019-01-12 09:28:35 | B001 | 1
    A-005    | 21456       | 2019-01-12 09:28:35 | B005 | 1
    A-006    | 42491       | 2019-01-16 02:52:07 | B008 | 2
    
    项目

    项目的样本摘录

    item_id | item_category
    B000 | Outdoors
    B001 | Outdoors
    B002 | Outdoors
    B003 | Kitchen
    B004 | Kitchen
    
    我创建的查询如下所示:

    看看这个问题,我们怎么知道2019年10月1日将在周四到来?我还想知道日期和相应的周计算

    Select i.item_category, 
        Sum(case when o.order_datetime = '01-10-2019' THEN o.Count(order_quantity) else null end) as Thursday_Units,
        Sum(case when o.order_datetime = '01-11-2019' THEN o.Count(order_quantity) else null end) as Friday_Units,
        Sum(case when o.order_datetime = '01-12-2019' THEN o.Count(order_quantity) else null end) as Saturday_Units,
        Sum(case when o.order_datetime = '01-13-2019' THEN o.Count(order_quantity) else null end) as Sunday_Units,
        Sum(case when o.order_datetime = '01-14-2019' THEN o.Count(order_quantity) else null end) as Monday_Units,
        Sum(case when o.order_datetime = '01-15-2019' THEN o.Count(order_quantity) else null end) as Tuesday_Units,
        Sum(case when o.order_datetime = '01-16-2019' THEN o.Count(order_quantity) else null end) as Wednesday_Units
    from Orders o
    inner join Items i on o.item_id = i.item_id
    group by i.item_category
    
    您可以使用
    datename()


    我还添加了一个
    where
    子句,该子句在过去7天内进行过滤。请注意,使用此技术,列不表示连续日期(如果今天是星期一,则上周五的数据比上周二的数据更新)。

    您可以使用DATENAME(W,getdate())确定一周中的哪一天。此外,您可以将PIVOT用于解决方案,而不是CASE。您的模式需要一些认真的检查。OrderDateTime不应为时间戳。该数据类型与时间或日期没有关系。其他列也有问题。不要盲目地选择数据类型。你会发现一份订单通常由多个项目组成——你很可能缺少一张桌子(或更多)。@C.G你知道吗?只是你似乎没有接受任何问题的答案。
    order\u datetime
    in
    Orders
    是一个错误。它与一个国家没有关系。如果是这样的话,那么将它与给定日期的午夜进行比较就不太可能匹配,除非你碰巧得到很多夜间命令。
    item_id | item_category
    B000 | Outdoors
    B001 | Outdoors
    B002 | Outdoors
    B003 | Kitchen
    B004 | Kitchen
    
    Select i.item_category, 
        Sum(case when o.order_datetime = '01-10-2019' THEN o.Count(order_quantity) else null end) as Thursday_Units,
        Sum(case when o.order_datetime = '01-11-2019' THEN o.Count(order_quantity) else null end) as Friday_Units,
        Sum(case when o.order_datetime = '01-12-2019' THEN o.Count(order_quantity) else null end) as Saturday_Units,
        Sum(case when o.order_datetime = '01-13-2019' THEN o.Count(order_quantity) else null end) as Sunday_Units,
        Sum(case when o.order_datetime = '01-14-2019' THEN o.Count(order_quantity) else null end) as Monday_Units,
        Sum(case when o.order_datetime = '01-15-2019' THEN o.Count(order_quantity) else null end) as Tuesday_Units,
        Sum(case when o.order_datetime = '01-16-2019' THEN o.Count(order_quantity) else null end) as Wednesday_Units
    from Orders o
    inner join Items i on o.item_id = i.item_id
    group by i.item_category
    
    select 
        i.item_category, 
        sum(case when datename(weekday, o.order_datetime) = 'Sunday' then order_quantity end) as sunday_units,
        sum(case when datename(weekday, o.order_datetime) = 'Monday' then order_quantity end) as monday_units,
        ...
        sum(case when datename(weekday, o.order_datetime) = 'Saturday' then order_quantity end) as saturday_units,
    from orders o 
    inner join items i  on o.item_id = i.item_id
    where o.order_datetime >= dateadd(day, -7, cast(getdate() as date))
    group by i.item_category