当前位置: 代码迷 >> Sql Server >> 请问怎么用SQL语句实现表3的效果(难度增加),多谢
  详细解决方案

请问怎么用SQL语句实现表3的效果(难度增加),多谢

热度:21   发布时间:2016-04-24 10:17:59.0
请教如何用SQL语句实现表3的效果(难度增加),谢谢
本帖最后由 efile 于 2014-07-25 12:53:52 编辑
各位老师好,我还有一个SQL语句的问题,也一直写不出来,请各位老师指点一下,谢谢。

简单说,以表1为基础,从表2中提取符合要求的数值,形成表3,详见下面例子。

表1
ID 名称
1 AAAAAAAAAA
2 BBBBBBBBBB
3 CCCCCCCCCC
4 DDDDDDDDDD
5 EEEEEEEEEE


表2
ID 名称                  更新时间
34 BBBBBBBBBB 6月2日
35 AAAAAAAAAA  6月1日
36 CCCCCCCCCC 6月9日
37 BBBBBBBBBB 7月25日
38 BBBBBBBBBB 7月25日
39 CCCCCCCCCC 3月6日
40 CCCCCCCCCC 7月25日
41 DDDDDDDDDD 7月25日
42 DDDDDDDDDD 7月25日
43 DDDDDDDDDD 7月25日

表3 (希望通过SQL语句实现这个表的效果)
ID 名称                 最后更新时间    今天更新数量(假设为7月25日)
1 AAAAAAAAAA         6月1日              0     
2 BBBBBBBBBB        7月25日            2
3 CCCCCCCCCC        7月25日            1
4 DDDDDDDDDD        7月25日            3
5 EEEEEEEEEE  
------解决方案--------------------

SELECT T1.ID
, T1.名称
, MAX(T2.更新日期) AS 最后更新时间
, (SELECT COUNT(*) FROM 表2 WHERE 名称 = T1.名称 AND 更新日期 = MAX(T2.更新日期) GROUP BY 名称) AS 今天更新数量
FROM 表1 T1
LEFT JOIN 表2 T2 ON T1.名称 = T2.名称
GROUP BY T1.ID
, T1.名称

------解决方案--------------------

SELECT T1.*,A.LASTDATE,ISNULL(B.TODAYCOUNT,0) AS TODAYCOUNT
FROM T1
LEFT JOIN 
(SELECT NAME,MAX(UPDATETIME) AS LASTDATE FROM T2 GROUP BY NAME)A ON T1.NAME=A.NAME
LEFT JOIN 
(SELECT NAME,COUNT(*) AS TODAYCOUNT FROM T2 WHERE UPDATETIME=CONVERT(VARCHAR(10),GETDATE(),112) GROUP BY NAME ) B ON T1.NAME=B.NAME


这样?
------解决方案--------------------
在上次的基础上稍作调理就可以了:
create table 表1
(ID int,
名称 char(20))

insert into 表1 values
(1,'AAAAAAAAAA'),
(2,'BBBBBBBBBB'),
(3,'CCCCCCCCCC'),
(4,'DDDDDDDDDD'),
(5,'EEEEEEEEEE')

select * from 表1

create table 表2
(ID int,
名称 char(20),
更新时间 char(10))

insert into 表2 values
(34,'BBBBBBBBBB','6月2日'),
(35,'AAAAAAAAAA','6月1日'),
(36,'CCCCCCCCCC','6月9日'),
(37,'BBBBBBBBBB','7月25日'),
(38,'BBBBBBBBBB','7月25日'),
(39,'CCCCCCCCCC','3月6日'),
(40,'CCCCCCCCCC','7月25日'),
(41,'DDDDDDDDDD','7月25日'),
(42,'DDDDDDDDDD','7月25日'),
(43,'DDDDDDDDDD','7月25日')

select * from 表2

with ta as
(
select 名称,COUNT(更新时间) as cnt from 表2 
where 更新时间=rtrim(MONTH(GETDATE()))+'月'+RTRIM(DAY(GETDATE()))+'日'
group by 名称 )

select a.ID,a.名称,isnull(MAX(更新时间),'') 最后更新时间,
ISNULL(c.cnt,0) 今天更新数 from 表1 a 
left join 表2 b on a.名称=b.名称
left join ta c on a.名称=c.名称
group by a.ID,a.名称,c.cnt
  相关解决方案