无意之中,一个困惑了N久的问题找到了
上一篇 / 下一篇 2008-05-05 16:51:20 / 个人分类:工作篇
先看一个语句
&]^DB D0我想查一个客户时间段内每个分类的数量和金额,并且按总量统计ITPUB个人空间w4GBy{.n*Y
SELECT B.CODE_ID,SUM(A.SAL_AMT) SAL_AMT,SUM(A.SAL_MNY) SAL_MNYITPUB个人空间V#yfx*P {@f._
FROM SALE_CUST_PROD_MONTH A, (SELECT A.PROD_CODE,A.PROD_NAME,B.CODE_ID,B.CODE_NAME FROM BAS_PROD_INFO A,
q"W$vS0I\0W.|AZ#A0(SELECT CODE_ID,CODE_NAME FROM BAS_TYPE_CODE WHERE TYPE_CODE = 'PROD_SORT') BITPUB个人空间q9k+qCV},gX{VB
WHERE A.PROD_SORT = B.CODE_ID) B WHERE A.COMP_CODE = '11640101'ITPUB个人空间gD]Wl"b
AND OPER_MONTH >= '200801' AND OPER_MONTH <= '200802' AND A.PROD_CODE = B.PROD_CODE
y a]#d%C6D?Ui0AND A.CUST_CODE = '640101006250'ITPUB个人空间\Z0{,|0OQ
GROUP BY GROUPING SETS((B.CODE_ID),1);
CODE_ID SAL_AMT SAL_MNY
h1SU-^J011 33 9042
%H ^?M4DV015 24 858ITPUB个人空间2D}m&U_d&B
13 51 4053ITPUB个人空间6}[iP6E4i'?
12 18 2193ITPUB个人空间P#K_#@0a3a
21 17 328.5ITPUB个人空间
AiJ(Xw qP
14 46 2089.5ITPUB个人空间\Bt.y(YU5r_A
20 6 162
#@K3A x'?0null 195 18726ITPUB个人空间5_G8MRMI x
(null 是为了说明方便加上的,真实的数据为空)
GROUPING SETS 是一个很强大的分组函数,可以实现包括rollup,cube 这些分组函数功能,这里的(B.CODE_ID)表示按 CODE_ID 分组,1 表示显示汇总量。
接下来,我需要根据传入的参数,对数量和金额进行一个转换(比如金额显示成万元,数量显示成箱)
@/h} pL5u0SELECT B.CODE_ID,SUM(A.SAL_AMT)*0.2 SAL_AMT,SUM(A.SAL_MNY)/10000 SAL_MNYITPUB个人空间|:Jjy.zl
FROM SALE_CUST_PROD_MONTH A, (SELECT A.PROD_CODE,A.PROD_NAME,B.CODE_ID,B.CODE_NAME FROM BAS_PROD_INFO A,ITPUB个人空间(e+u4Rlp/sY
(SELECT CODE_ID,CODE_NAME FROM BAS_TYPE_CODE WHERE TYPE_CODE = 'PROD_SORT') B
k$b$Yy(U+}0WHERE A.PROD_SORT = B.CODE_ID) B WHERE A.COMP_CODE = '11640101'ITPUB个人空间zx"Z5Pu
AND OPER_MONTH >= '200801' AND OPER_MONTH <= '200802' AND A.PROD_CODE = B.PROD_CODE
`yt&m:GRs9]q4f.f
_0AND A.CUST_CODE = '640101006250'
1I}J6C0e0GROUP BY GROUPING SETS((B.CODE_ID),1);
CODE_ID SAL_AMT SAL_MNY
X%~0OU
tN0@%bW9b[011 6.6 0.9042
im:WcO?3p;VD
|015 4.8 0.0858ITPUB个人空间IIB+_(H8l#o
13 10.2 0.4053
D0?:R.Uz012 3.6 0.2193
4P#{(` lA.gX021 3.4 0.03285ITPUB个人空间`,a2~sG2`Q,E
14 9.2 0.20895
7N2t/fpLK
q"N3nlV020 1.2 0.0162
z
S_)eF:n6I0null 39 1.8726
O6~Zju2w;m W3s0这样也没错
可是,当语句变成
P1|Q/e8r0SELECT B.CODE_ID,SUM(A.SAL_AMT)*1 SAL_AMT,SUM(A.SAL_MNY)/1 SAL_MNY
nl'}+Bi Y$_5t(I0FROM SALE_CUST_PROD_MONTH A, (SELECT A.PROD_CODE,A.PROD_NAME,B.CODE_ID,B.CODE_NAME FROM BAS_PROD_INFO A,
I_1b hrR4N0(SELECT CODE_ID,CODE_NAME FROM BAS_TYPE_CODE WHERE TYPE_CODE = 'PROD_SORT') BITPUB个人空间LD[$Z~}&j/g
oZ
WHERE A.PROD_SORT = B.CODE_ID) B WHERE A.COMP_CODE = '11640101'ITPUB个人空间$cPB4CO8[
AND OPER_MONTH >= '200801' AND OPER_MONTH <= '200802' AND A.PROD_CODE = B.PROD_CODEITPUB个人空间`ssm
UnA
Hy
AND A.CUST_CODE = '640101006250'
3IO+H0g*c0GROUP BY GROUPING SETS((B.CODE_ID),1);ITPUB个人空间.kig$X
w1b%hJ
即想显示原来的单位时,问题来了
CODE_ID SAL_AMT SAL_MNYITPUB个人空间-C!k
r'|
c2K
13 null null
z-a#b7N@021 null null
$R7g(bz&H!@4\ v011 null null
_+E,_Q%^"b
F`*r)]012 null null ITPUB个人空间'} dcUgC^*LJ(dJ
20 null null ITPUB个人空间\O5}3^&| JpJ'?
14 null null