一个数据查询问题 (100分)

  • 主题发起人 主题发起人 seewind
  • 开始时间 开始时间
S

seewind

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现以下的功能,根据表1,生成表2。(数据库使用ORACLE)
表一 表二
字段1 字段2 字段1 字段2 字段3(统计)
1 a 1 a 1
1 b 1 b 1
2 a 2 a 2
2 b 2 b 1
2 a 3 a 1
3 a 3 b 0
 
select 字段1,字段2,字段3
from 表1 a,
(select count(*) 字段3,字段1,字段2 from 表1 group by 字段1,字段2) b
where
a.字段1=b.字段1 and a.字段2=b.字段2
 
SELECT 字段1, 字段2 COUNT(*) 字段3 FROM 表1
GROUP BY 字段1,字段2
 
第一位的和第二位的代码有区别吗?
还有,如果字段1为datetime类型,包括年、月、日信息。如果想按月或者按年进行统计,
可以吗?该如何做?
 
xianguo is right,简洁,执行效率高
完颜康有点走弯路,画蛇添足
 
可以,如下:
SELECT YEAR(字段1), 字段2 COUNT(*) 字段3 FROM 表1
GROUP BY YEAR(字段1),字段2
 
To seewind:
以上的答复只能得到如下数据:
表二
字段1 字段2 字段3(统计)
1 a 1
1 b 1
2 a 2
2 b 1
3 a 1
但是以下的数据将不会出现:
3 b 0
故正确的答案为:
select a.Field1,a.Field2,ISNULL(a.Field3 + b.Field3,0) as Field3
from (select Field1,Field2,0 as Field3
from (select distinct Field1 from test1) as a,
(select distinct Field2 from test1) as b) as a
left join (select Field1,Field2,count(*) as Field3 from test1
group by Field1,Field2) as b
on a.Field1 = b.Field1 and a.Field2 = b.Field2
order by a.Field1,a.Field2
你不妨自己测试一下!

 
后退
顶部