我试图获得一个包含额外列的完整表,其中一个计数区别于一组字段,而不是整个表。
基本上,我有这张表:
| mandt | ktopl | yhkonto | yhhykto | yhbwkz |
|-------|-------|------------|---------|--------|
| 111 | SAG | 0034600000 | 346 | 1 |
| 111 | SAG | 0034600000 | 346 | 21 |
| 111 | SAG | 0034600000 | 346 | 82 |
| 111 | SAG | 0034600000 | 346 | 87 |
| 111 | SAG | 0039410000 | 39410 | 1 |
| 111 | SAG | 0039410000 | 39410 | 21 |
| 111 | SAG | 0039410000 | 39410 | 82 |
| 111 | SAG | 0039410000 | 39410 | 87 |
| 111 | SAG | 0039630000 | 39630 | 1 |
| 111 | SAG | 0039630000 | 39630 | 21 |
我希望得到这个结果,并附加一列,其中我按yhhykto
,mandt
和ktopl
计算yhkonto
分组的不同值的计数:
| mandt | ktopl | yhkonto | yhhykto | yhbwkz | cnt_yhhykto |
|-------|-------|------------|---------|--------|-------------|
| 111 | SAG | 0034600000 | 346 | 1 | 1 |
| 111 | SAG | 0034600000 | 346 | 21 | 1 |
| 111 | SAG | 0034600000 | 346 | 82 | 1 |
| 111 | SAG | 0034600000 | 346 | 87 | 1 |
| 111 | SAG | 0039410000 | 39410 | 1 | 1 |
| 111 | SAG | 0039410000 | 39410 | 21 | 1 |
| 111 | SAG | 0039410000 | 39410 | 82 | 1 |
| 111 | SAG | 0039410000 | 39410 | 87 | 1 |
| 111 | SAG | 0039630000 | 39630 | 1 | 1 |
| 111 | SAG | 0039630000 | 39630 | 21 | 1 |
我有一个有效的查询:
select distinct yh010.mandt,
yh010.ktopl,
yh010.yhkonto,
yh010.yhhykto,
yh010.yhbwkz,
yh010_x.cnt_yhhykto
from yh010
inner join (
select distinct yh010.mandt,
yh010.ktopl,
yh010.yhkonto,
count(distinct yh010.yhhykto) as cnt_yhhykto
from yh010
group by yh010.mandt, yh010.ktopl, yh010.yhkonto
) yh010_x
on yh010_x.mandt = yh010.mandt
and yh010_x.ktopl = yh010.ktopl
and yh010_x.yhkonto = yh010.yhkonto
;
但这种内部联接本身并不是最好的解决方案。或者是吗? 我的想法更像是:
select yh010.mandt,
yh010.ktopl,
yh010.yhkonto,
yh010.yhhykto,
yh010.yhbwkz
count( distinct yh010.yhhykto
) over ( group by yh010.mandt, yh010.ktopl, yh010.yhkonto
) as cnt_dist
from yh010
;
但是Incorrect syntax near the keyword 'distinct'.
我应该保留那个有效的查询还是有更好的选择?
可以找到小提琴here
谢谢!
答案 0 :(得分:2)
基于此描述:
我想得到这个结果,得到不同值的计数 由mandt,ktopl和yhkonto分组的yhhykto
您想要此查询:
select y.mandt, y.ktopl, y.yhkonto,
count(distinct y.yhhykto)
from yh010 y
group by y.mandt, y.ktopl, y.yhkonto;
您的实际结果和结果查询与描述不符,让我有点困惑。
答案 1 :(得分:0)
安东尼奥
请问您可以使用CTE表达式
测试以下SELECT语句with cte as (
select
distinct mandt, ktopl, yhkonto, yhhykto
from TBL1
)
select
TBL1.*, (
select count(cte.yhhykto)
from cte
where
TBL1.mandt = cte.mandt and
TBL1.ktopl = cte.ktopl and
TBL1.yhkonto = cte.yhkonto
) as cnt
from TBL1