oracle按列求和而不使用联合
oracle sum by column without using union
我有这个table:(供应table:库存中有多少产品)
Storage_id product_id amount
1 1000 55
1 1005 1
...
29 1000 3
29 1421 21
29 1566 0
30 1259 921
我应该写一个查询来得到这个结果:
storage_id product_id amount
1 1000 55
2 1000 61
...
30 1000 10
total_except_storage_30 1000 1505
1 1001 1
2 1001 50
...
30 1001 56
total_except_storage_30 1001 1251
...
"Total_except_storage_30" 是除了第 30 个存储之外的所有存储中每个产品的总数。例如第一个 "total_except_storage_30" 是 product_id 1000 在除 [=26 之外的所有存储中=] 30,第二个是 product_id 1001.
*** 我不允许使用“联盟”。
我尝试使用完全外部连接,但这没有用,结果没有“total_except_storage_30”:
Select t.Storage_id, t.product_id, t.amount
from myTable t full outer join
(
select 'total_except_storage_30' as storage_id, product_id, sum(amount)
from myTable
group by product_id
) total
on t.storage_id = total.storage_id
应该这样做
select
product,
storage_id,
sum(case when storage_id != 30 then sal end)
from scott.emp
group by grouping sets (
(storage_id,product),
(product)
)
order by product, storage_id;
这是一个使用标准 EMP DEPT 的示例
SQL> select
2 deptno,
3 empno,
4 sum(sal)
5 from scott.emp
6 group by grouping sets (
7 (empno,deptno),
8 (deptno)
9 )
10 order by deptno, empno;
DEPTNO EMPNO SUM(SAL)
---------- ---------- ----------
10 7782 2450
10 7839 5000
10 7934 1300
10 8750
20 7369 800
20 7566 2975
20 7788 3000
20 7876 1100
20 7902 3000
20 10875
30 7499 1600
30 7521 1250
30 7654 1250
30 7698 2850
30 7844 1500
30 7900 950
30 9400
17 rows selected.
你可以看到你在整个过程中得到了小计
我有这个table:(供应table:库存中有多少产品)
Storage_id product_id amount
1 1000 55
1 1005 1
...
29 1000 3
29 1421 21
29 1566 0
30 1259 921
我应该写一个查询来得到这个结果:
storage_id product_id amount
1 1000 55
2 1000 61
...
30 1000 10
total_except_storage_30 1000 1505
1 1001 1
2 1001 50
...
30 1001 56
total_except_storage_30 1001 1251
...
"Total_except_storage_30" 是除了第 30 个存储之外的所有存储中每个产品的总数。例如第一个 "total_except_storage_30" 是 product_id 1000 在除 [=26 之外的所有存储中=] 30,第二个是 product_id 1001.
*** 我不允许使用“联盟”。
我尝试使用完全外部连接,但这没有用,结果没有“total_except_storage_30”:
Select t.Storage_id, t.product_id, t.amount
from myTable t full outer join
(
select 'total_except_storage_30' as storage_id, product_id, sum(amount)
from myTable
group by product_id
) total
on t.storage_id = total.storage_id
应该这样做
select
product,
storage_id,
sum(case when storage_id != 30 then sal end)
from scott.emp
group by grouping sets (
(storage_id,product),
(product)
)
order by product, storage_id;
这是一个使用标准 EMP DEPT 的示例
SQL> select
2 deptno,
3 empno,
4 sum(sal)
5 from scott.emp
6 group by grouping sets (
7 (empno,deptno),
8 (deptno)
9 )
10 order by deptno, empno;
DEPTNO EMPNO SUM(SAL)
---------- ---------- ----------
10 7782 2450
10 7839 5000
10 7934 1300
10 8750
20 7369 800
20 7566 2975
20 7788 3000
20 7876 1100
20 7902 3000
20 10875
30 7499 1600
30 7521 1250
30 7654 1250
30 7698 2850
30 7844 1500
30 7900 950
30 9400
17 rows selected.
你可以看到你在整个过程中得到了小计