ID(土地图斑号) AREA(面积) TYPE(类型) XZQY(行政区域)
0001                      32            A(水田) WH(武汉)
0002                        3            D(草地) WH
0003                      878            B(旱地) SH(上海)
0004                        34            C(菜地) WH
0005                        2             D                 BJ(北京)
0006                       7             A                WH
0007                      43             C                WH
0008                      43             B                WH假设有10000条类似的数据,行政区域有20多个,地类有50种,我现在要查出各行政区域的A、B、C三种地类的总面积,结果表如下:XZQY      TYPE_A      TYPE_B       TYPE_C请问语句该怎么写?

解决方案 »

  1.   


    SELECT XZQY,
           NVL(SUM(DECODE(TYPE, 'A', AREA)), 0) TYPE_A,
           NVL(SUM(DECODE(TYPE, 'B', AREA)), 0) TYPE_B,
           NVL(SUM(DECODE(TYPE, 'C', AREA)), 0) TYPE_B
      FROM TBL
     GROUP BY XZQY
      

  2.   


    --之前别名有点问题 type_C
    SELECT XZQY,
           NVL(SUM(DECODE(TYPE, 'A', AREA)), 0) TYPE_A,
           NVL(SUM(DECODE(TYPE, 'B', AREA)), 0) TYPE_B,
           NVL(SUM(DECODE(TYPE, 'C', AREA)), 0) TYPE_C
      FROM TBL
     GROUP BY XZQY
      

  3.   

    NVL(SUM(DECODE(TYPE, 'A', AREA)), 0) TYPE_A这句话里的0是什么意思啊?
      

  4.   

    判断type,如果是A,就SUM()求和他的面积。如果没有该类型面积,返回则为NULL.
    NVL()函数,当面积和为空时,就赋值为0.
    建议你还是先看书学习吧。
      

  5.   

    嗯,学习了,刚刚查询了下,提示缺少from关键字,还是谢谢了啊
      

  6.   

    不会吧,我这边测试过 没有问题的,你SQL我看下
      

  7.   

    select XZQYBM,
    NVL(SUM(DECODE(LANDTYPE,060111,AREA)),0)  ST,
    NVL(SUM(DECODE(LANDTYPE,060112121,AREA)),0)  SJD,
    NVL(SUM(DECODE(LANDTYPE,060112122,AREA)),0) CD,
    NVL(SUM(DECODE(LANDTYPE,'060113a',AREA)),0) LOWHD,
    NVL(SUM(DECODE(LANDTYPE,'060113d',AREA)),0) OVERHD,
    NVL(SUM(DECODE(LANDTYPE,060114,AREA)),0) HTD
    FROM LAND_INFO
    GROUP BY XZQYBMXZQYBM就对应XZQY,LANDTYPE就对应TYPE,TYPE_A TYPE_B之类就对应ST SJD之类,
    第一次因为XZQYBM后面忘打逗号了,所以说缺FROM关键字,现在改了,但是提示  ORA-07122:无效数字