T_TMP:
NM_KIND     VC_CODE     NM_VALUE     VC_ID
1     01     100     AA
1     02     200     AA
2     01     300     AA
2     02     400     AA
2     01     500     AA
1     02     600     AA
2     01     700     AA
1     01     800     BB
1     02     900     BB
1     02     1000   BBSQL> SELECT
  2   NM_KIND,
  3   VC_CODE,
  4   SUM(NM_VALUE)
  5  FROM
  6   T_TMP
  7  WHERE
  8   VC_ID='AA'
  9  GROUP BY
 10   CUBE(NM_KIND),
 11   VC_CODE
 12  ORDER BY
 13   NM_KIND,
 14   VC_CODE;   NM_KIND VC_CODE  SUM(NM_VALUE)
---------- -------- -------------
         1 01                 100
         1 02                 800
         2 01                1500
         2 02                 400
           01                1600
           02                12006行が選択されました。  1  SELECT
  2   NM_KIND,
  3   VC_CODE,
  4   SUM(NM_VALUE)
  5  FROM
  6   T_TMP
  7  WHERE
  8   VC_ID='BB'
  9  GROUP BY
 10   CUBE(NM_KIND),
 11   VC_CODE
 12  ORDER BY
 13   NM_KIND,
 14*  VC_CODE
SQL> /   NM_KIND VC_CODE  SUM(NM_VALUE)
---------- -------- -------------
         1 01                 800
         1 02                1900
           01                 800
           02                1900SQL> 
       
但和我想要的不一样,第一条SQL文的结果没有问题,第二条的结果想要的是
   NM_KIND VC_CODE  SUM(NM_VALUE)
---------- -------- -------------
           01                 800
           02                1900
就是说如果NM_KIND只有1个的话,只需要合计数据,因为数据是一样的。NM_KIND可以NVL为0。
想只用一条SQL文来实现,不用UNION ALL.

解决方案 »

  1.   

    这种结果挺好的。不明白为什么非要去掉一些数据。
    我倒觉得正确结果更明了,尽管有看上去重复的数据。
    但是一个小计结果,一个是总计结果,能一样吗?
    性质不一样的数据怎么可能随便就去掉一行呢?
    我不明白是你要这么做,还是客户?如果是客户,
    那么正需要你去说服他,你是写程序的专家,他不是。
    如果是你要这么做,我只能说你经验还少,需要多加历练。