SQL 用于每个客户每年的总销售额
Posted
技术标签:
【中文标题】SQL 用于每个客户每年的总销售额【英文标题】:SQL for total sales for each customer for each year 【发布时间】:2019-09-24 23:52:07 【问题描述】:使用 Advantage 数据库服务器 11 我试图逐年查找每个客户从两种类型的总购买量进行比较,但出现错误:
[iAnywhere 解决方案][Advantage SQL 引擎]预期 找不到词法元素:那么
这是表格。
customernr | Date_in | Status | InvType | Qty | Total
1111 9/1/2018 D 5 25.00
1111 12/1/2018 V D 3 15.00
1111 5/12/2019 L 1 2.00
1111 7/11/2019 D 5 35.00
1112 6/21/2018 L 7 18.00
1112 9/14/2019 L 3 7.00
Select
customernr,
SUM(CASE WHEN date_in >= '2018-01-01' and date_in <= '2018-12-31' total
and InvType='D' ELSE 0 END) LastYD,
SUM(CASE WHEN date_in >= '2018-01-01' and date_in <= '2018-12-31' total
and InvType='L' ELSE 0 END) LastYL,
SUM(CASE WHEN date_in >= '2019-01-01' and date_in <= '2019-12-31' total
and InvType='D' ELSE 0 END) ThisYD,
SUM(CASE WHEN date_in >= '2019-01-01' and date_in <= '2019-12-31' total
and InvType='L' ELSE 0 END) ThisYL
from invoice
where (Status <> 'V' or Status IS NULL)
Group by Customernr
感谢您的帮助,
KHJ
【问题讨论】:
除了下面的答案之外,您会发现如果您使用BETWEEN
而不是>=
和<=
(如WHEN date_in BETWEEN '2018-01-01' and '2018-12-31'
),您的SQL 将更具可读性。您可能还会发现改用 YEAR(date_in)
更容易,并将该列添加到 GROUP BY。
谢谢,因为我只需要一年总年份最好,再次感谢仍在学习中。
【参考方案1】:
您的CASE
声明中缺少THEN
Select
customernr,
SUM(CASE WHEN date_in >= '2018-01-01' and date_in <= '2018-12-31'
and InvType='D' THEN total ELSE 0 END) LastYD,
SUM(CASE WHEN date_in >= '2018-01-01' and date_in <= '2018-12-31'
and InvType='L' THEN total ELSE 0 END) LastYL,
SUM(CASE WHEN date_in >= '2019-01-01' and date_in <= '2019-12-31'
and InvType='D' THEN total ELSE 0 END) ThisYD,
SUM(CASE WHEN date_in >= '2019-01-01' and date_in <= '2019-12-31'
and InvType='L' THEN total ELSE 0 END) ThisYL
from invoice
where (Status <> 'V' or Status IS NULL)
Group by Customernr
【讨论】:
谢谢,当您在第一行出错并复制并粘贴整个过程时,就会发生这种情况。以上是关于SQL 用于每个客户每年的总销售额的主要内容,如果未能解决你的问题,请参考以下文章
如何创建查询以显示本周 sql 的每个日期的总销售额 [关闭]
LeetCode:Database 91.按年度列出销售总额
SQL Server 2008 R2-查询以获取按月销售的总销售额和数量