首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这个语句应该怎么写

2012-03-24 
这个语句应该如何写?tableA:IdName1A2B3CtableC:IdTypeNameTime1A2011-07-01 07:30:302A2011-07-02 07:30:

这个语句应该如何写?
tableA:

Id Name
1 A
2 B
3 C


tableC:
Id TypeName Time
1 A 2011-07-01 07:30:30
2 A 2011-07-02 07:30:30
3 B 2011-07-03 07:30:30
4 A 2011-07-08 07:30:30
5 B 2011-07-11 07:30:30
6 C 2011-07-16 07:30:30

页面上的搜索条件只有一个:按照时间进行搜索(从什么时候到什么时候)

我要实现的效果是用tableC联tableA取得所有tableA表中的每个Name在什么时候到什么时候的数量

比如从2011-06-28到2011-07-28我要显示的数据是:

A 3
B 2
C 1


请问语句应该怎么写?







[解决办法]

SQL code
create table tableA(Id int,Name varchar(10))insert into tablea values(1 ,'A')insert into tablea values(2 ,'B')insert into tablea values(3 ,'C')create table tableC(Id int,TypeName varchar(10),Time datetime)insert into tablec values(1 ,'A', '2011-07-01 07:30:30')insert into tablec values(2 ,'A', '2011-07-02 07:30:30')insert into tablec values(3 ,'B', '2011-07-03 07:30:30')insert into tablec values(4 ,'A', '2011-07-08 07:30:30')insert into tablec values(5 ,'B', '2011-07-11 07:30:30')insert into tablec values(6 ,'C', '2011-07-16 07:30:30')go--如果对应的NAME都存在,用俩表关联。select m.name , count(1) cnt from tablea m , tablec n where m.name = n.typename and convert(varchar(10),n.time,120) between '2011-06-28' and '2011-07-28'group by m.name/*name       cnt         ---------- ----------- A          3B          2C          1(所影响的行数为 3 行)*/--如果可能存在NAME在符合条件的情况在tablec中不存在,需要用0显示,则使用如下的子查询select m.name , cnt = (select count(1) from tablec n where m.name = n.typename and convert(varchar(10),n.time,120) between '2011-06-28' and '2011-07-28')from tablea m /*name       cnt         ---------- ----------- A          3B          2C          1(所影响的行数为 3 行)*/drop table tablea , tablec 

热点排行