问题描述
我正在尝试按月、销售区域和类型汇总销售日期。问题是,当我尝试按年份分组时,结果会发生变化。
我的简化查询如下:
SELECT
DAB700.DATUM,DAB000.X_REGION,DAB700.BELEG_ART,// the date,sales region,order type
// calculate the number of orders per month
COUNT (disTINCT CASE WHEN MONTH(DAB700.DATUM) = 1 THEN DAB700.BELEG_NR END) as jan,COUNT (disTINCT CASE WHEN MONTH(DAB700.DATUM) = 2 THEN DAB700.BELEG_NR END) as feb,COUNT (disTINCT CASE WHEN MONTH(DAB700.DATUM) = 3 THEN DAB700.BELEG_NR END) as mar
FROM "DAB700.ADT" DAB700
left join "DAB050.ADT" DAB050 on DAB700.BELEG_NR = DAB050.ANUMMER // join to table 050,to pull in order info
left join "DF030000.DBF" DAB000 on DAB050.KDNR = DAB000.KDNR // join table 000 to table 050,to pull in customer info
left join "DAB055.ADT" DAB055 on DAB050.ANUMMER = left (DAB055.APNUMMER,6)// join table 055 to table 050,to pull in product info
WHERE (DAB700.BELEG_ART = 10 OR DAB700.BELEG_ART = 20) AND (DAB700.DATUM>={d '2021-01-01'}) AND (DAB700.DATUM<={d '2021-01-11'}) AND DAB055.ARTNR <> '999999' AND DAB055.ARTNR <> '999996' AND DAB055.TERMIN <> 'KW.22.22' AND DAB055.TERMIN <> 'KW.99.99' AND DAB050.AUF_ART = 0
group by DAB700.DATUM,DAB700.BELEG_ART
这将返回以下数据,这是正确的(手动检查):
| DATUM | X_REGION | BELEG_ART | jan | feb | mar |
|------------|----------|-----------|-----|-----|-----|
| 04.01.2021 | 1 | 10 | 3 | 0 | 0 |
| 04.01.2021 | 3 | 10 | 2 | 0 | 0 |
| 04.01.2021 | 4 | 10 | 1 | 0 | 0 |
| 04.01.2021 | 4 | 20 | 1 | 0 | 0 |
| 04.01.2021 | 6 | 20 | 2 | 0 | 0 |
| 05.01.2021 | 1 | 10 | 1 | 0 | 0 |
and so on....
1 月的总记录数为 117(正确)。
现在我想汇总一行中的数据(例如,按地区和类型分组的数据)..
所以我更改了我的代码,以便:
SELECT
YEAR(DAB700.DATUM),
和
group by YEAR(DAB700.DATUM)
其余代码保持不变。
现在我的结果是:
| EXPR | X_REGION | BELEG_ART | jan | feb | mar |
|------|----------|-----------|-----|-----|-----|
| 2021 | 1 | 10 | 16 | 0 | 0 |
| 2021 | 1 | 20 | 16 | 0 | 0 |
| 2021 | 2 | 10 | 19 | 0 | 0 |
| 2021 | 2 | 20 | 22 | 0 | 0 |
| 2021 | 3 | 10 | 12 | 0 | 0 |
| 2021 | 3 | 20 | 6 | 0 | 0 |
视觉上是正确的。但是,一月份的总数现在是 116。相差 1。我做错了什么?
我怎样才能保留第一个代码的结果 - 但它是否按照第二组显示?
解决方法
你算独特 BELEG_NR
。这就是与众不同的原因。让我们看一个例子。假设您的表格包含四行:
基准 | X_REGION | BELEG_ART | BELEG_NR |
---|---|---|---|
04.01.2021 | 1 | 10 | 100 |
04.01.2021 | 1 | 10 | 200 |
05.01.2021 | 1 | 10 | 100 |
05.01.2021 | 1 | 10 | 300 |
这给你每天、地区和 belegart:
基准 | X_REGION | BELEG_ART | DISTINCT COUNT BELEG_NR |
---|---|---|---|
04.01.2021 | 1 | 10 | 2 |
05.01.2021 | 1 | 10 | 2 |
以及每年、地区和 belegart
年 | X_REGION | BELEG_ART | DISTINCT COUNT BELEG_NR |
---|---|---|---|
2021 | 1 | 10 | 3 |
BELEG_NR
100 每天出现的次数不会超过一次,因此每个实例都会被计算在内。但它在一年中出现两次,所以它被计算为一次而不是两次。