血液明细表如下:
create table "blood"."OC_CarryOrderD" (
ID nvarchar2(20) not null,
"ProductCode" nvarchar2(10),
"BloodGroup" nvarchar2(10)
);
有编号,产品类别和血型三个字段
数据如下:
要计算某一产品的不同血型的袋数
就要将表行转列,做成如下效果:
代码如下
select productcode,
MAX(decode(rn, 1, codesum, NULL)) A,
MAX(decode(rn, 2, codesum, NULL)) AB,
MAX(decode(rn, 3, codesum, NULL)) B,
MAX(decode(rn, 4, codesum, NULL)) O
from
(
select productcode,bloodgroup,codesum,row_number() over(PARTITION BY productcode ORDER BY bloodgroup, codesum) rn from (
select productcode,bloodgroup, count(productcode) as codesum from oc_carryorderd2 group by productcode,bloodgroup order by bloodgroup)
)
group by productcode;
注意: MAX后面的列名(A,AB,B,O)要注意按字母顺序排列,因为后面的select语句是按血型字段升序排列的
对每种产品的袋数做个汇总,如下图
可以在MAX后面加入查询字段 sum(codesum)