由于没有使用过DB2以及对SQL不够精通向大家求助!
表结构:
CREATE VIEW DB2ADMIN.SVCHN
( "SSYSID ",
"SYEAR ",
"SMONTH ",
"SDAYOFWEEK ",
"SDATE ",
"STIME ",
"SWEEK ",
"SFDAY ",
"SINTERVAL ",
"SCHID ",
"SCHTYPE ",
"SCHANSTATE ",
"SCHUTLP ",
"SCHUTTOT ",
"SCHUTBUS "
)
AS SELECT RLPARID,RTRIM(CHAR(YEAR(RSTART_DATE))),RTRIM (CHAR(MONTH(RSTART_DATE)))
,DAYOFWEEK_ISO(RSTART_DATE),DATE(RSTART_DATE),TIME(RSTART_DATE),RTRIM(
CHAR (WEEK_ISO(RSTART_DATE))),RTRIM(CHAR(DATE(RSTART_DATE)-( DAYOFWEEK_ISO
( RSTART_DATE)-1)DAY)), RINTERVAL,RCHAN_ID, RCHAN_TYPE,RCHAN_STATE,
RCHANLPU, RCHANTOTU,RCHANBUSU
FROM MCHANNEL;
问题语句:
SDATE BETWEEN '2006-08-01 ' AND '2006-09-30 ' AND
((STIME BETWEEN '08:00:00 ' and '18:00:00 ') OR (STIME BETWEEN '22:00:00 ' AND '23:00:00 ')) UNION ALL
SELECT CASE -1 WHEN 8 THEN 1 WHEN 0 THEN 7 ELSE SDAYOFWEEK -1 END SDAYOFWEEK, DATE(SDATE -1 DAYS) SDATE,STIME,SSYSID,SCHID,SCHUTTOT FROM
DB2ADMIN.SVCHN WHERE SSYSID IN ( 'P101 ') AND SCHID IN ( '00 ', '01 ', '02 ', '03 ', '20 ', '21 ', '22 ', '23 ', '24 ', '25 ', '26 ', '27 ', '30 ', '31 ', '32 ', '33 ', '34 ', '35 ', '36 ', '37 ', '38 ', '39 ', '3A ', '3B ', '3C ', '3D ', '3E ', '3F ', '40 ', '41 ', '42 ', '43 ', '44 ', '45 ', '46 ', '50 ', '51 ', '80 ', '81 ', '82 ', '83 ', '84 ', '85 ', '86 ', '87 ', '88 ', '89 ', '8A ', '8B ', '8C ', '8D ', '8E ', '8F ', '90 ', '91 ', '92 ', '93 ', '94 ', '95 ', '96 ', '97 ', '98 ', '99 ', '9A ', '9B ', '9C ', '9D ', '9E ', '9F ', 'A0 ', 'A1 ', 'A2 ', 'A3 ') AND
SDATE BETWEEN '2006-08-02 ' AND '2006-10-01 ' AND ((STIME BETWEEN '00:00:00 ' AND '02:00:00 '))) AS TBL
GROUP BY SDATE,SMONTH,SSYSID,SCHID ORDER BY SSYSID,SCHID,DATE,SMONTH;
目的实现按月查询!
------解决方案--------------------------------------------------------
group by 会自动按最小分组统计,所以你的最小分组的单位是 SDATE 去掉就可以了
------解决方案--------------------------------------------------------
GROUP BY SDATE,SMONTH,SSYSID,SCHID,DATE ORDER BY SSYSID,SCHID,DATE,SMONTH;