100分求一SQL语句。在线急等.分不够可以再加。
日期 编号 结果
2005-09-24 001 假
2005-09-24 002 真
.
.
2005-09-25 001 真
2005-09-25 003 真
就是我如何统计一段时间内的的编号个数,和每个编号所对应的最后日期的结论.
结果像这样:
个数 结果是真的个数 结果是假的个数
3 3 0
2楼: select 编号个数=(select count(编号) from table where 日期 between date1 and date2),编号个数1=(select count(编号) from table where 日期 between date1 and date2 and 结果=''真''),编号个数2=(select count(编号) from table where 日期 between date1 and date2 and 结果=''假'')金蝶财务软件多少钱
3楼: select (select count(*) from 表名 group by 日期)as 个数,
(select count(*) from 表名 group by 日期 where 结果=真)as 结果是真的个数,
(select count(*) from 表名 group by 日期 where 结果=假)as 结果是假的个数
4楼: To gekin
我觉得你好象没有明白我的意思,你是把所有结果为真的和结果为假的都统计出来了。
我想要的是以一个编号对应的最大的日期的结果最为结果。
5楼: 不知道是我说的不够明白还是大家没有理解我的意思。
个数是可以用COUNT(DISTINCT 编号)统计出来的,只是结论是以一个编号的最大的日期的结论做为结论来统计。
6楼: 这个问题很难吗??
不够我可以加分啊。
记账软件版7楼: 加我QQ谈吧:19613946
8楼: SELECT 编号,COUNT(*) AS 编号个数,SUM(CASE WHEN 结果=真 THEN 1 ELSE 0 END) AS 结果是真的个数,SUM(CASE WHEN 结果=假 THEN 1 ELSE 0 END) AS 结果是假的个数,
MAX(日期) AS 最后日期
FROM 表
GROUP BY 编号
9楼: 只是结论是以一个编号的最大的日期的结论做为结论来统计?
10楼: TO zhlu:
你还是没有看明白我的意思,你的语句最后得出的是全部的编号,我要的编号是不重复的.每一个编号会对应几个日期和结论,我要统计的是一个编号最后的日期得出的结论作为结论.而不是单纯的累加.比如说有10个编号,表中的记录有30条,我要的最后结果是像这样子的:
人数: 结果是真的个数 结果是假的个数
10 7(随便举例) 3
而不是:
人数: 结果是真的个数 结果是假的个数
30 18(随便举例) 12
11楼: 先order by,然后再distinct不行吗?正好可以取楼主要的一条,而不是多条
SELECT 编号,COUNT(*) AS 编号个数,SUM(CASE WHEN 结果=真 THEN 1 ELSE 0 END) AS 结果是真的个数,SUM(CASE WHEN 结果=假 THEN 1 ELSE 0 END) AS 结果是假的个数,
MAX(日期) AS 最后日期
FROM xxxxxxx 这里用distinct以后的视图代替
GROUP BY 编号
12楼: to Asen521:
怎么了,我在QQ上不是将SQL发给你吗,怎么发了答案就没有回应了?金碟财务软件官网
13楼: (2005-09-25 16:47:08) 18971865
你好。
(2005-09-25 16:47:10) 18971865
在吗?
(2005-09-25 16:37:02) 姚明黎啦
在
(2005-09-25 16:37:38) 姚明黎啦
你是Asen521吗
(2005-09-25 16:47:56) ぁ月光恋人ぁ
您好。。能帮我解决一下在DFW上的SQL问题吗??
(2005-09-25 16:37:54) 姚明黎啦
无问题,不过你要说清楚
(2005-09-25 16:38:02) 姚明黎啦
想要得到的结果
(2005-09-25 16:48:21) ぁ月光恋人ぁ
好的。
(2005-09-25 16:48:36) ぁ月光恋人ぁ
表结构你清楚了吧。。
(2005-09-25 16:38:29) 姚明黎啦
看过了
(2005-09-25 16:38:47) 姚明黎啦
个数是指?
(2005-09-25 16:39:22) 姚明黎啦
你想得到的个数是什么的个数
(2005-09-25 16:50:27) ぁ月光恋人ぁ
个数可以用COUNT(DISTINCT 编号)来统计,这个没问题。
(2005-09-25 16:40:37) 姚明黎啦
嗯,那问题在那里?
(2005-09-25 16:51:05) ぁ月光恋人ぁ
问题就在每个编号对应的结论是以最大日期的结论为准。
(2005-09-25 16:51:47) ぁ月光恋人ぁ
比如说001在24号的结果是假,25号的结果是真
那么最后统计就把001的结果算做是真。
(2005-09-25 16:44:02) 姚明黎啦
你是想所有记录的真的个数吗
(2005-09-25 16:44:24) 姚明黎啦
你是想得到所有记录的真的个数吗
(2005-09-25 16:55:10) ぁ月光恋人ぁ
对,所有结果为真的个数和为假的个数。
但是结果是以最大日期的结果为准。
(2005-09-25 16:45:05) 姚明黎啦
哦,明了
(2005-09-25 16:55:34) ぁ月光恋人ぁ
恩,麻烦你了。。
(2005-09-25 16:46:06) 姚明黎啦
真的个数是按每个编号的最大日期为准
(2005-09-25 16:47:01) 姚明黎啦
你等等,我帮你写
(2005-09-25 16:57:30) ぁ月光恋人ぁ
恩,是的。。每个编号对应的结果都是以最大日期的结果为准。
(2005-09-25 16:57:42) ぁ月光恋人ぁ
好的。谢谢。。
(2005-09-25 16:47:55) 姚明黎啦
写完我还会帮你测试一下,所有要等等
(2005-09-25 16:58:38) ぁ月光恋人ぁ
好的。万分感谢。。
(2005-09-25 17:08:19) 姚明黎啦
OK了
(2005-09-25 17:18:55) ぁ月光恋人ぁ
真的,太谢谢你了。。
(2005-09-25 17:08:56) 姚明黎啦
因为你说个数无问题
(2005-09-25 17:09:07) 姚明黎啦
所以里面我没有加入个数
(2005-09-25 17:19:32) ぁ月光恋人ぁ
恩,是的个数可以自己求。
(2005-09-25 17:09:18) 姚明黎啦
只加入真和假
(2005-09-25 17:19:47) ぁ月光恋人ぁ
恩。能把语句给我发过来吗???
(2005-09-25 17:09:34) 姚明黎啦
select
(select count(result) as [结果是真的个数] from
(select a.* from tablename a,
(select max(dates)as dates,number from tablename group by number)b
where a.dates=b.dates and a.number=b.number)c
where result=''真'')as [结果是真的个数],
(select count(result) as [结果是假的个数] from
(select a.* from tablename a,
(select max(dates)as dates,number from tablename group by number)b
where a.dates=b.dates and a.number=b.number)c
where result=''假'') as [结果是假的个数]
(2005-09-25 17:09:46) 姚明黎啦
语句比较长
(2005-09-25 17:09:52) 姚明黎啦
不过可以一句解决
(2005-09-25 17:20:26) ぁ月光恋人ぁ
我估计不是很简单的。。我试一下然后给你结分。
(2005-09-25 17:20:38) ぁ月光恋人ぁ
还能一句解决??
(2005-09-25 17:10:23) 姚明黎啦
当然不简单
(2005-09-25 17:10:30) 姚明黎啦
你看这么长就知
(2005-09-25 17:21:11) ぁ月光恋人ぁ
是啊。。太感谢你了。。
(2005-09-25 17:11:36) 姚明黎啦
dates是日期
number是编号
result是结果
tablename是表名
(2005-09-25 17:12:06) 姚明黎啦
你要先改一改上述几个名称
(2005-09-25 17:22:36) ぁ月光恋人ぁ
好的。谢谢你。。我把名字改一下试试。
(2005-09-25 17:12:22) 姚明黎啦
好
(2005-09-25 17:13:33) 姚明黎啦
如果语句有问题,你可以再发给我改
(2005-09-25 17:24:42) ぁ月光恋人ぁ
(2005-09-25 17:11:36) 姚明黎啦
好的,太谢谢你了。。
(2005-09-25 17:14:35) 姚明黎啦
不客气
(2005-09-25 17:30:17) 姚明黎啦
朋友,行吗?
(2005-09-25 17:41:01) ぁ月光恋人ぁ
不好意思,我的服务器现在连接不上,我正在试。
让你久等了。。
(2005-09-25 17:30:56) 姚明黎啦
嗯
(2005-09-25 17:31:34) 姚明黎啦
你将那几个名字换了,就可以在查询分析器执行了
(2005-09-25 17:42:12) ぁ月光恋人ぁ
恩。非常感谢 。。
(2005-09-25 17:32:01) 姚明黎啦
不要太客气
(2005-09-25 17:42:30) ぁ月光恋人ぁ
呵呵。。
(2005-09-25 17:49:39) 姚明黎啦
朋友,还不行吗,是不是有问题
(2005-09-25 19:11:38) 姚明黎啦
兄弟,那条SQL试过有没有问题
记账软件版14楼: TO 饭前饭后:
哈哈,你还把这里搞的热闹啊.
把聊天记录都贴出来了.我下午有事出去了没来得及测试,现在测试了你的语句还是不对。
我不知道你在什么环境下测试的。。我用的是ORACLE。
TO chenybin:
你还是没有看明白我的要求。不是简单的统计。
15楼: 感谢大家,问题解决了。是在饭前饭后的基础上我又改正了以下。
牵涉到我们公司数据库问题,我就不把表结构贴出来了。只把改好的SQL 语句贴出来。
select g.Num as 总人数,e.Zhen as 合格数,f.Jia as 不合格数,h.KY as 可疑人数
from
(select count(jielun) as Zhen from
(select a.* from chujian a,
(select max(jyrq)as jyrq,xybm from chujian group by xybm)b
where a.jyrq=b.jyrq and a.xybm=b.xybm)c
where jielun=''合格'')e,
(select count(jielun) as Jia from
(select a.* from chujian a,
(select max(jyrq)as jyrq,xybm from chujian group by xybm)b
where a.jyrq=b.jyrq and a.xybm=b.xybm)d
where jielun=''不合格'')f,
(select count(distinct xybm)as Num from chujian)g,
(select count(jielun) as KY from
(select a.* from chujian a,
(select max(jyrq)as jyrq,xybm from chujian group by xybm)b
where a.jyrq=b.jyrq and a.xybm=b.xybm)d
where jielun=''可疑'') h
结贴。免得饭兄又要贴什么东西啊。。