sql server 如何用0来填充字段?

倾斜的水瓶座 2016-01-31 09:13:49
有两个字段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

也就是没有的type用0来填充。
...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-02-01
  • 打赏
  • 举报
回复
建议你将type的基础数据定义为一个字典表,否则有点相当于HardCode

	;WITH a([value],[type]) AS (
		select 2,1 UNION
		select 2,2 UNION
		select 4,3 
	)
	SELECT dict_type.type,isnull(a.[value],0) AS [value] FROM (VALUES(1),(2),(3),(4),(5)) dict_type([type])
	LEFT JOIN a  ON a.[type]=dict_type.[type]

type	(No column name)
1	2
2	2
3	4
4	0
5	0
zbdzjx 2016-02-01
  • 打赏
  • 举报
回复
同意楼上,如果是“固定1,2,3,4,5”,可以就先union all出“1,2,3,4,5”五条记录,再左连接。
xiaoxiangqing 2016-01-31
  • 打赏
  • 举报
回复
用union all也可以
倾斜的水瓶座 2016-01-31
  • 打赏
  • 举报
回复
已解决,自己来回答吧

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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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