我有以下SAMPLE_DATA數據集:的Oracle SQL SELECT SUM當值與其他GROUP BY子句不同
ORD | POS | INSGRP | INS | DELI | DELPOS
-------------------------------------------------------
1 | 'Pos11' | '11' | 11 | 'deli111' | 'DelPos1111'
1 | 'Pos11' | '11' | 11 | 'deli112' | 'DelPos1121'
1 | 'Pos11' | '11' | 11 | 'deli112' | 'DelPos1122'
2 | 'Pos21' | '21' | 21 | 'deli211' | 'DelPos2111'
2 | 'Pos21' | '22' | 22 | 'deli221' | 'DelPos2211'
2 | 'Pos21' | '22' | 22 | 'deli221' | 'DelPos2212'
3 | 'Pos31' | '31' | 31 | 'deli311' | 'DelPos3111'
3 | 'Pos32' | '31' | 31 | 'deli321' | 'DelPos3211'
3 | 'Pos32' | '31' | 31 | 'deli321' | 'DelPos3212'
3 | 'Pos32' | '31' | 31 | 'deli322' | 'DelPos3221'
- 當有許多銷售點的ORD,只有一個INSGRP
- 當只有一個爲ORD POS,可以有很多INSGRP
- 這是我的實際要求的一個簡單的版本,只有揭露這個問題
- 一個ORD可以有很多DELI
- 一個DELI可以有很多DELPOS
- 德利DELPOS在那裏添加複製ORD-POS-INSGRP-INS
我要總結取決於ORD,POS和INSGRP INS列行。
- 當只有一個POS的INSGRP時,我希望INS保持不變。
- 當有許多INSGRP的POS,我想不同的INSGRP的INS的總和爲POS
所以我想下面的結果:
ORD | SUM(INS)
-----------------------------------------------------------------------
1 | 11
One INSGRP for one POS, so INS stay the same 11
2 | 43
Two INSGRP for one POS, so INS is the SUM of the INSGRP 21 and 22 so 43
3 | 31
One INSGRP for two POS, so INS stay the same 31
我試過如下:
SELECT ord,
SUM (ins) AS ins
FROM sample_data
GROUP BY ord, pos
ORDER BY ord;
,得到了這樣的結果:
ORD | INS
---------
1 | 33
2 | 65
3 | 31
3 | 93
所有內容總結在一起,並且每個ORD 3的INSGRP都有一行。然後,我將INS添加到GROUP BY子句中,但它只在兩行中分隔ORD 2。
我試圖用一切分組,並把一所獨特的開頭:
SELECT UNIQUE ord,
SUM (ins) AS ins
FROM sample_data
GROUP BY ord, pos, deli, DelPos
ORDER BY ord;
,結果是:
ORD | INS
---------
1 | 11
2 | 21
2 | 22
3 | 31
這是我從我想要的結果得到的最接近。唯一缺少的部分是將ORD 2分組在一行上並對INS進行求和。
而且,我希望能像分區組:
SUM (ins) OVER (PARTITION BY ord, pos, deli, DelPos) AS ins
有人可以幫助我?
這裏的要求絲毫SAMPLE_DATA:
WITH sample_data
AS (SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli111' deli, 'DelPos1111' DelPos FROM DUAL
UNION ALL
SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli112' deli, 'DelPos1121' DelPos FROM DUAL
UNION ALL
SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli112' deli, 'DelPos1122' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '21' insGrp, 21 ins, 'deli211' deli, 'DelPos2111' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '22' insGrp, 22 ins, 'deli221' deli, 'DelPos2211' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '22' insGrp, 22 ins, 'deli221' deli, 'DelPos2212' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos31' pos, '31' insGrp, 31 ins, 'deli311' deli, 'DelPos3111' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli321' deli, 'DelPos3211' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli321' deli, 'DelPos3212' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli322' deli, 'DelPos3221' DelPos FROM DUAL)
SELECT UNIQUE ord,
SUM (ins) AS ins
FROM sample_data
GROUP BY ord, pos, deli, DelPos
ORDER BY ord;
還是創造並插入
create table tbl (ord number, pos varchar2(10), insGrp varchar2(10), ins number, deli varchar2(10), DelPos varchar2(10))
insert into tbl (SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli111' deli, 'DelPos1111' DelPos FROM DUAL
UNION ALL
SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli112' deli, 'DelPos1121' DelPos FROM DUAL
UNION ALL
SELECT 1 ord, 'Pos11' pos, '11' insGrp, 11 ins, 'deli112' deli, 'DelPos1122' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '21' insGrp, 21 ins, 'deli211' deli, 'DelPos2111' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '22' insGrp, 22 ins, 'deli221' deli, 'DelPos2211' DelPos FROM DUAL
UNION ALL
SELECT 2 ord, 'Pos21' pos, '22' insGrp, 22 ins, 'deli221' deli, 'DelPos2212' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos31' pos, '31' insGrp, 31 ins, 'deli311' deli, 'DelPos3111' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli321' deli, 'DelPos3211' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli321' deli, 'DelPos3212' DelPos FROM DUAL
UNION ALL
SELECT 3 ord, 'Pos32' pos, '31' insGrp, 31 ins, 'deli322' deli, 'DelPos3221' DelPos FROM DUAL)
您可以共享創建腳本並以INSE的形式提供一些樣本數據RT語句? –
你是什麼意思「另外,我想分區...」?是不是足夠的GROUP BY?根據您的樣本數據,您能否顯示預期的輸出? –
就像我說過的,這是一個簡單的測試,在我最後的請求中我想要其他字段的GROUP BY不同的列。所以我不能GROUP BY整個SELECT。預期的結果是一樣的。 –