SQL查询年统计

lonyjianhui 2011-06-29 02:32:44
有如下两个表
表一:Make(生产表)
D N Q (D:生产日期,N:编号,Q:质量(合格或不合格))
2000-01-01 001 False
2000-01-02 002 True
2001-01-01 003 True
....................

表二:Repair(维修表)
D N B (D:生产日期,N:编号,B:可修复性)
2000-01-30 001 False
2001-02-01 003 True

求一条查询语句,查询结果为下统计表:
Y MC RC (Y:年份,MC:年生产总量,RC:年维修总量)
2000 ... ...
...全文
104 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lonyjianhui 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qgqch2008 的回复:]
SQL code
CREATE TABLE Make(D VARCHAR(20), N VARCHAR(10), Q VARCHAR(10))
CREATE TABLE Repair(D VARCHAR(20), N VARCHAR(10), B VARCHAR(10))
INSERT dbo.Make
SELECT '2000-01-01', '001', 'False' UNION A……
[/Quote]
佩服得五体投地,没有任何破绽,无疑是认真研究过的,诶,怪自己上学不努力,现在后悔不及,非常感谢大侠。分全给你了,其他人的连边都粘不上,就不好意思了
lonyjianhui 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liboyaojia 的回复:]
看不明白说了个 啥
[/Quote]
第一个表的每条记录代表生产一个产品,第二个表每条记录代表一次维修,最后需要的表是对前两个表的统计,以年份为基础
lonyjianhui 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taomanman 的回复:]
SQL code
select convert(varchar(4),[t1.MakeTime],120) as Y,
count(t1.N) as MC ,
count(t2.N) as RC
from MakeRecord t1, RepairRecord t2
where convert(varchar……
[/Quote]
一看你就是高手,不过我写的那个是不合理的,我要的是:每年的生产总量和维修总量,要切合实际的,年份不能断,要不高层看到2000一条记录,接着到2002,中间少了个2001,那就死得很惨了。也就是说,如果生产或维修量是0的,也需要插入统计表中。另外,重申下问题:
第一个表的每条记录代表生产一个产品,第二个表每条记录代表一次维修,最后需要的表是对前两个表的统计,以年份为基础
Relict 2011-07-07
  • 打赏
  • 举报
回复
看不明白说了个 啥
暖枫无敌 2011-07-07
  • 打赏
  • 举报
回复


select convert(varchar(4),[t1.MakeTime],120) as Y,
count(t1.N) as MC ,
count(t2.N) as RC
from MakeRecord t1, RepairRecord t2
where convert(varchar(4),[t1.MakeTime],120) = convert(varchar(4),[t2.StartTime],120)
group by convert(varchar(4),[t1.MakeTime],120)
order by Y desc;

lonyjianhui 2011-07-07
  • 打赏
  • 举报
回复
都一个星期了。。。没人看到还是。。。
lonyjianhui 2011-07-07
  • 打赏
  • 举报
回复
诶。。。虽然我自己写的不是很好,也比楼上写的好多了。
qgqch2008 2011-07-07
  • 打赏
  • 举报
回复
CREATE TABLE Make(D VARCHAR(20), N VARCHAR(10), Q VARCHAR(10))
CREATE TABLE Repair(D VARCHAR(20), N VARCHAR(10), B VARCHAR(10))
INSERT dbo.Make
SELECT '2000-01-01', '001', 'False' UNION ALL
SELECT '2000-01-02', '002', 'True' UNION ALL
SELECT '2001-01-01', '003', 'True';
INSERT dbo.Repair
SELECT '2000-01-30', '001', 'False' UNION ALL
SELECT '2001-02-01', '003', 'True';
SELECT a.*,b.RC FROM
(SELECT YEAR(D) AS [D],COUNT(N) AS [MC] FROM dbo.Make GROUP BY YEAR(D))a
LEFT JOIN
(SELECT YEAR(D) AS [D],COUNT(N) AS [RC] FROM dbo.Repair GROUP BY YEAR(D))b
ON a.D = b.D

DROP TABLE dbo.Make,dbo.Repair
/*
D MC RC
----------- ----------- -----------
2000 2 1
2001 1 1

(2 個資料列受到影響)

*/
lonyjianhui 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ly_longyue 的回复:]
生产表中的N 代表不同的产品吗?
只统计合格的吗?
你这个给的 说明太少了
此消息通过 【CSDN论坛 Winform测试版】 回复!有关此工具
[/Quote]

统计表中所有数据,年生产量和维修量N是编号,你可以认为他是ISBN条形码,我写过一个查询语句,不过我认为我写的好像不太好,毕竟自己不熟悉,下面给出
select A.Y,A.MC,B.RC from (select year(MakeTime)as Y,count(*)as MC from MakeRecord group by year(MakeTime)) A,(select year(StartTime)as Y,count(*)as RC from RepairRecord group by year(StartTime)) B where A.Y=B.Y
龍月 2011-06-29
  • 打赏
  • 举报
回复
生产表中的N 代表不同的产品吗? 只统计合格的吗? 你这个给的 说明太少了 此消息通过 【CSDN论坛 Winform测试版】 回复!有关此工具
TimZhuFaith 2011-06-29
  • 打赏
  • 举报
回复
select year(m.D),sum(m.N),sum(r.N) from Make m left join Repair r on year(m.D)=year(r.D) group by year(m.D)

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧