SQL:聚合来自相同 table 的不同月份
SQL: Aggregate different months from same table
假设我有一个 table 产品的销售日期。 las,我不能在这里格式化 table,因此代码为:
table1:
Product|Date|Sales
-------|----|-----
ProdA |1.1.|100
ProdB |1.1.| 50
ProdC |1.1.| 75
ProdA |2.1.|110
ProdB |2.1.| 60
ProdC |2.1.| 60
.... |... |...
我需要一个新的 table 以及每个月的销售额:
Product| Jan| Feb|...
-------|----|----|...
ProdA |1234|1400|...
ProdB | 234| 400|...
ProdC | 524| 640|...
... |... |... |...
我尝试对 CASE
使用 SQL-查询。 []中的文字是缩写,真正的表达是to_char(to_month(..)) construct
有效。
SELECT
Product,
CASE WHEN [date == 1] THEN SUM(Sales) END AS Jan,
CASE WHEN [date == 2] THEN SUM(Sales) END AS Feb,
CASE WHEN [date == 3] THEN SUM(Sales) END AS Mar,
...
FROM
table1
GROUP BY
Product
我收到 00979. 00000 - "not a GROUP BY expression"
错误。
我知道我可以通过为每个月构建 tables 并再次添加一些来解决问题,但这是低性能的。我也想明白,为什么构造不起作用?
PS:
- [Edit1]:它是一个 Oracle DB
尝试在 case
语句 sum(case when end)
之前给出 agreegation
SELECT
Product,
sum(CASE WHEN date = 1 THEN Sales END) AS Jan,
SUM(CASE WHEN date = 2 THEN Sales END) AS Feb,
SUM(CASE WHEN date = 3 THEN Sales END) AS Mar,
...
FROM
table1
GROUP BY
Product
假设我有一个 table 产品的销售日期。 las,我不能在这里格式化 table,因此代码为:
table1:
Product|Date|Sales
-------|----|-----
ProdA |1.1.|100
ProdB |1.1.| 50
ProdC |1.1.| 75
ProdA |2.1.|110
ProdB |2.1.| 60
ProdC |2.1.| 60
.... |... |...
我需要一个新的 table 以及每个月的销售额:
Product| Jan| Feb|...
-------|----|----|...
ProdA |1234|1400|...
ProdB | 234| 400|...
ProdC | 524| 640|...
... |... |... |...
我尝试对 CASE
使用 SQL-查询。 []中的文字是缩写,真正的表达是to_char(to_month(..)) construct
有效。
SELECT
Product,
CASE WHEN [date == 1] THEN SUM(Sales) END AS Jan,
CASE WHEN [date == 2] THEN SUM(Sales) END AS Feb,
CASE WHEN [date == 3] THEN SUM(Sales) END AS Mar,
...
FROM
table1
GROUP BY
Product
我收到 00979. 00000 - "not a GROUP BY expression"
错误。
我知道我可以通过为每个月构建 tables 并再次添加一些来解决问题,但这是低性能的。我也想明白,为什么构造不起作用?
PS: - [Edit1]:它是一个 Oracle DB
尝试在 case
语句 sum(case when end)
agreegation
SELECT
Product,
sum(CASE WHEN date = 1 THEN Sales END) AS Jan,
SUM(CASE WHEN date = 2 THEN Sales END) AS Feb,
SUM(CASE WHEN date = 3 THEN Sales END) AS Mar,
...
FROM
table1
GROUP BY
Product