当前位置:主页>仓库管理软件> 列表

100分求一SQL语句。在线急等.分不够可以再加。

记账软件版1楼: 有一个表,结构如下:
日期 编号 结果
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

结贴。免得饭兄又要贴什么东西啊。。