2 sd2208464 sd2208464 于 2016.01.31 21:16 提问

sql server查询结果连续的问题。

有两个字段value和type,type是int类型。固定1,2,3,4,5。查询数据时按type分组。
具体语句为:
select avg(value) from [table] group by type

得到的结果是
value type
2 1
2 2
4 3

期望的结果是
value type
2 1
2 2
4 3
0 4
0 5

也就是没有的用0来填充。

6个回答

caozhy
caozhy   Ds   Rxr 2016.01.31 21:48
已采纳
 再定义一个表,叫t1,两个字段:value type,数据
0 1
0 2
...
0 5

查询
(select avg(value) as value from [table] group by type) union (select * from t1 where t1.type not in (select type from [table]))
sd2208464
sd2208464   2016.01.31 22:06

恩。是个办法。但是需要建表。而且维护不易。从论坛看到这么个方法。

 select a.number,ISNULL(b.value,0) from 
(select number from master..spt_values
where type='p' and number between 1 and 5) a

left join 

(SELECT  AVG(value) AS value, type
FROM         [table]

GROUP BY type ) b
on a.number = b.type
JX_yang_zhi
JX_yang_zhi 回复caozhy: s s ss
接近 2 年之前 回复
JX_yang_zhi
JX_yang_zhi 回复caozhy: s s ss
接近 2 年之前 回复
caozhy
caozhy 嗯,外连接也是一个办法。
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.31 21:20

value可以是null的?不然不可能没有4 5啊,贴出你原始数据看看

sd2208464
sd2208464   2016.01.31 21:24

value是可以不添的。也就是说。用户选择了type是1 2 3 的项。没选择4和5的项。那么数据库里就不存在type是4和5的数据了。

enpterexpress
enpterexpress   2016.01.31 22:50
sd2208464
sd2208464 这个跟分类汇总还有点区别!!
接近 2 年之前 回复
java_0_day
java_0_day   2016.02.01 01:42

你把所有的value值都+1 这样就没有0了,最少就是1,查询出来把结果-1不就完了,简单明了

sd2208464
sd2208464 主要是type不一定肯定有1.2.3.4.5。有可能只有123或者45.
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!