表 byq_hz 如下:
 GQ      SYEAR SMONTH XZ GZ CC DS
工区5 2010 08 0 0 1 1
工区3 2010 08 0 1 0 0
工区2 2009 01 2 0 0 0
工区1 2009 06 0 2 1 0
工区1 2010 05 0 1 0 0
工区1 2010 08 2 1 1 0字段说明:GQ=工区  ,SYEAR=年度  SMONTH=月份  XZ,GZ,CC,DS 为数据条件为:
GQ = 工区1   SYEAR = 2010
查询的结果为:
SMONTH  XZ  GZ  CC  DS
01
02
03
04
05      0   1   0   0
06
07
08      2   1   1   0
09
10
11
12说明:
条件为GQ 和 SYEAR
结果要根据数据情况
有记录的把数据显示出来
没有记录的加入一条空记录
如GQ = 工区1   SYEAR = 2010 SMONTH=12没有记录,则放入一条空记录
要求查询结果必须是12条记录。如何用一条SQL写出来呢?

解决方案 »

  1.   

    SELECT * FROM
    ((select lpad(rownum,2,0) MON from dual  connect by rownum<=12) A
    LEFT  JOIN (SELECT * FROM byq_hz  WHERE GQ ='¹¤Çø1' AND SYEAR = '2010'
    ) B ON A.MON=B.SMONTH)
      

  2.   

    SELECT t1.m,t2.XZ,t2.GZ,t2.CC,t2.DS FROM
      (SELECT LPAD(ROWNUM,2,0) m FROM DUAL CONNECT BY ROWNUM<=12) t1,
      (SELECT * FROM byq_hz WHERE gq='工区1' AND syear='2010') t2
    WHERE t1.m=t2.smonth(+)
    ORDER BY t1.m如果byq_hz表中相同工区、年、月有重复数据需要在t2中处理了先
      

  3.   

    给你推荐篇文章
    [url http://www.cnblogs.com/gkl0818/archive/2009/02/25/1398078.html][/url]
      

  4.   

    to yf520gn:
    你给的SQL执行后提示缺少右括号,改成如下好使了。
    SELECT * FROM
    (select lpad(rownum,2,0) MON from dual  connect by rownum<=12) A
    LEFT  JOIN (SELECT * FROM byq_hz  WHERE GQ ='¹¤Çø1' AND SYEAR = '2010'
    ) B ON A.MON=B.SMONTHto cnwz:
    你的SQL 好用。to zhuomingwang:
    文章内容部是我想要的。不过谢谢。