我目前一張資料表出來,一般銷售明細
舉例
銷售商品 | 數量 | 金額 |
---|---|---|
衣服 | 3 | 0 |
衣服 | 2 | 200 |
平常都會用 GROUPY BY 衣服
但是出來結果 就會是
舉例
銷售商品 | 數量 | 金額 |
---|---|---|
衣服 | 5 | 200 |
想要有同時呈現 下方方式
舉例
銷售商品 | 數量 | 無金額數量 | 金額
----- | ------------- |--------
衣服 | 2 | 3 | 200
大大們 有沒有解題的方法呢?
這是
計價與不計價分離的好方法
貴公司要求是正確的
一般來說一個SQL Statement 就可以解決
SELECT x,商品, SUM(x.計價數量),SUM(x.不計價數量), SUM(x.金額)
FROM(
SELECT a,商品,
CASE WHEN a.金額>0 THEN a.數量 ELSE 0 END AS 計價數量,
CASE WHEN a.金額=0 THEN a.數量 ELSE 0 END AS 不計價數量,
a.金額
FROM 交易資料 a
) x
GROUP BY x.商品
我們是 Oracle/SAP 外圍系統最佳合作夥伴
我猜你是否是要我猜你是否是要ROW TO COLMN 的 PIVOT 功能?
Three Ways To Transpose Rows Into Columns in Oracle SQL
隨意吧...
select
銷售商品
,Sum(數量) as 數量
,Sum(無金額數量) as 無金額數量
,Sum(金額) as 金額
from (
select
銷售商品
,(Case when 金額 > 0 then Sum(數量) else 0 end) as 數量
,(Case when 金額 = 0 then Sum(數量) else 0 end) as 無金額數量
,Sum(金額) as 金額
from (
select *
from ((
select '衣服' 銷售商品,3 as 數量 ,0 as 金額
)union(
select '衣服' 銷售商品,2 as 數量 ,200 as 金額
)) as k
) as k
group by 銷售商品,金額
) as k
group by 銷售商品
create table ithelp160826 (
id smallserial
, prod text not null
, qty int not null
, amount int not null
);
insert into ithelp160826 values
(default, '衣服', 3, 0),
(default, '衣服', 2, 200);
with
x as (
select prod
, sum(qty)
from ithelp160826
where amount = 0
group by prod
),
y as (
select prod
, sum(qty)
from ithelp160826
where amount != 0
group by prod
),
z as (
select prod
, sum(amount)
from ithelp160826
group by prod
)
select z.prod as "銷售商品"
, y.sum as "數量"
, x.sum as "無金額數量"
, z.sum as "金額"
from x
, y
, z
where x.prod = y.prod
and y.prod = z.prod;
+----------+------+------------+------+
| 銷售商品 | 數量 | 無金額數量 | 金額 |
+----------+------+------------+------+
| 衣服 | 2 | 3 | 200 |
+----------+------+------------+------+
(1 row)