日期:2014-05-17  浏览次数:20772 次

求帮忙写个sql
有两张表
A1(zd,sort)
A2(xh,xq,tq)
A1中数据 :('星期一',1),('星期二',2)...('星期天',7),('晴',1),('雨',2),('大风',3)
A2中数据 :(1,'星期一','晴'),(2,'星期天','晴'),(3,'星期六','雨'),(4,'星期一','雨'),
  (5,'星期二','晴'),(6,'星期一','雨'),(7,'星期三','晴'),(8,'星期四','雨'),
  (9,'星期五','雨')
请问怎么得出下面的纪录
星期 天气 总数
星期一 晴 1  
星期一 雨 2  
星期一 大风 0
星期二 晴 1  
星期二 雨 0  
星期二 大风 0 
星期三 晴 1  
星期三 雨 0  
星期三 大风 0 
星期四 晴 0  
星期四 雨 1  
星期四 大风 0 
星期五 晴 0  
星期五 雨 1  
星期五 大风 0
星期六 晴 0  
星期六 雨 1
星期六 大风 0
星期天 晴 1  
星期天 雨 0  
星期天 大风 0

------解决方案--------------------
左连接
select t3.tq,t3.xq,t4.cnt from 
(select xq,tq,count(*) cnt from a02 group by xq,tq) t4,
(select t1.zd tq ,t2.zd xq
from (select zd from a01 where zd not like '星期%') t1,
(select zd from a01 where zd like '星期%') t2) t3
where t3.xq = t4.xq(+)
and t3.tq = t4.tq(+)
------解决方案--------------------


CREATE TABLE aa1(zd VARCHAR2(20),sorts NUMBER);
CREATE TABLE a2(xh NUMBER,xq VARCHAR2(20),tq VARCHAR2(20));
INSERT INTO aa1 VALUES('星期一',1);
INSERT INTO aa1 VALUES('星期二',2);
INSERT INTO aa1 VALUES('星期三',3);
INSERT INTO aa1 VALUES('星期四',4);
INSERT INTO aa1 VALUES('星期五',5);
INSERT INTO aa1 VALUES('星期六',6);
INSERT INTO aa1 VALUES('星期天',7);
INSERT INTO aa1 VALUES('晴',1);
INSERT INTO aa1 VALUES('雨',2);
INSERT INTO aa1 VALUES('大风',3);
COMMIT;
INSERT INTO a2 VALUES (1,'星期一','晴') ;
INSERT INTO a2 VALUES (2,'星期天','晴') ;
INSERT INTO a2 VALUES (3,'星期六','雨') ;
INSERT INTO a2 VALUES (4,'星期一','雨') ;
INSERT INTO a2 VALUES (5,'星期二','晴') ;
INSERT INTO a2 VALUES (6,'星期一','雨') ;
INSERT INTO a2 VALUES (7,'星期三','晴') ;
INSERT INTO a2 VALUES (8,'星期四','雨');
INSERT INTO a2 VALUES (9,'星期五','雨');
COMMIT;




SELECT '星期一', '晴', sum(CASE WHEN a.xq='星期一' AND a.tq='晴' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期一', '雨', sum(CASE WHEN a.xq='星期一' AND a.tq='雨' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期一', '大风', sum(CASE WHEN a.xq='星期一' AND a.tq='大风' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期二', '晴', sum(CASE WHEN a.xq='星期二' AND a.tq='晴' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期二', '雨', sum(CASE WHEN a.xq='星期二' AND a.tq='雨' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期二', '大风', sum(CASE WHEN a.xq='星期二' AND a.tq='大风' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期三', '晴', sum(CASE WHEN a.xq='星期三' AND a.tq='晴' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期三', '雨', sum(CASE WHEN a.xq='星期三' AND a.tq='雨' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期三', '大风', sum(CASE WHEN a.xq='星期三' AND a.tq='大风' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期四', '晴', sum(CASE WHEN a.xq='星期四' AND a.tq='晴' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期四', '雨', sum(CASE WHEN a.xq='星期四' AND a.tq='雨' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期四', '大风', sum(CASE WHEN a.xq='星期四' AND a.tq='大风' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期五', '晴', sum(CASE WHEN a.xq='星期五' AND a.tq='晴' THEN 1 ELSE 0 END )总数 
FROM a2 a
UNION ALL 
SELECT '星期五', '雨', sum(CASE WHEN a.xq='星期五' AND a.tq='雨' THEN 1 ELSE 0 END )总数 
FROM a2 a