我正在try 获取按星期几进行格式化的一周销售额,问题是我的查询行为与正常的Sum()一样,忽略了同一天的不同周的销售额.在示例数据库中,我在两个不同的星期和一周的同一天插入了两个不同的销售额,结果是单行为38.92,而不是两个行,其中的销售额与该星期的那一天一致.

这是我正在使用的查询:

SELECT
    CASE WHEN weekdays = 1 THEN Total_Sales ELSE 0 END as Sunday,
    CASE WHEN weekdays = 2 THEN Total_Sales ELSE 0 END as Monday,
    CASE WHEN weekdays = 3 THEN Total_Sales ELSE 0 END as Tuesday,
    CASE WHEN weekdays = 4 THEN Total_Sales ELSE 0 END as Wednesday,
    CASE WHEN weekdays = 5 THEN Total_Sales ELSE 0 END as Thursday,
    CASE WHEN weekdays = 6 THEN Total_Sales ELSE 0 END as Friday,
    CASE WHEN weekdays = 7 THEN Total_Sales ELSE 0 END as Saturday
FROM
    (SELECT 
         DATEPART(WEEKDAY, date) AS Weekdays,
         SUM(sales) AS Total_Sales
     FROM Sales
     WHERE CAST(Date AS date) BETWEEN '2023-03-01' AND '2023-03-10'
     GROUP BY DATEPART(weekday, Date)) X

当前结果:

Sunday Monday Tuesday Wednesday Thursday Friday Saturday
30.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 6.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 38.92 0.00
0.00 0.00 0.00 0.00 0.00 0.00 40.55

-你想要什么?

Sunday Monday Tuesday Wednesday Thursday Friday Saturday
30.00 0.00 0.00 0.00 0.00 13.84 0.00
0.00 6.00 0.00 0.00 0.00 25.08 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 40.55

Dbfiddle示例:https://dbfiddle.uk/r-Qg8JDT

推荐答案

SELECT 
    CASE WHEN weekdays = 1 THEN total_quantity ELSE 0 END as Sunday,
    CASE WHEN weekdays = 2 THEN total_quantity ELSE 0 END as Monday,
    CASE WHEN weekdays = 3 THEN total_quantity ELSE 0 END as Tuesday,
    CASE WHEN weekdays = 4 THEN total_quantity ELSE 0 END as Wednesday,
    CASE WHEN weekdays = 5 THEN total_quantity ELSE 0 END as Thursday,
    CASE WHEN weekdays = 6 THEN total_quantity ELSE 0 END as Friday,
    CASE WHEN weekdays = 7 THEN total_quantity ELSE 0 END as Saturday
FROM(
 SELECT 
    datepart(WEEKDAY, date) as weekdays,
    SUM(sales) as total_quantity
FROM sales
where cast(date as date)between '2023-03-01' and '2023-03-30'
group by datepart(dayofyear, date), datepart(weekday,date))X

那个星期五似乎没问题.

Dbfiddle示例:https://dbfiddle.uk/MbCfqFVY

Sql相关问答推荐

判断时间之间是否有时间

创建每小时重置的序列号

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

为什么两个不同的窗口函数给出不同的排序结果?

对非RUST源代码字符串使用`stringify!`,例如SQL查询

SQL Select 最小优先级

Select 列组(按同一表格中的另一列分组)Laravel 10

使用SQL数据库中的现有列派生或修改几个列

通过对象分离实现原子性

如果另一个表中不存在值列,则插入失败

在SQL中将项分配给容器

使用特定的Order By子句随机化SQL输出

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

将 jsonb 数组中的对象取消嵌套到单独的行中

计算不同模式的时间跨度

SQL SUM Filter逻辑解释

PostgreSQL如何将Unix纪元时间戳转换为日期时间并进行拼接

将表格和字符串连接以 for each 记录生成订单项目

函数调用作为插入值语句中的参数

如何在 Oracle 中获取此变量的值?