大清早,提问题啦。

ruhong 2014-05-06 06:57:43

select 被考核人,cast(datepart(month,考核时间) as varchar(10)) + '月' as 月份,sum(次数*b.分数) as 总分 from 绩效管理_考核列表 a
inner join 绩效管理_考核指标 b on a.指标项=b.指标序号
group by 被考核人,a.考核时间 having 被考核人=1


得出的结果是
被考核人 月份 总分
1 4月 -0.30
1 5月 -12.50

我的问题是,如果某个月没有考核数据,我如何让他也成这个月的数据?
如下
被考核人 月份 总分
1 1月 0
1 2月 0
1 3月 0
1 4月 -0.30
1 5月 -12.50
...全文
206 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2014-05-07
  • 打赏
  • 举报
回复
用动态语句生成了
發糞塗牆 2014-05-06
  • 打赏
  • 举报
回复
说错了,是接近10年
發糞塗牆 2014-05-06
  • 打赏
  • 举报
回复
引用 4 楼 rockyljt 的回复:

DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2000-01-01'
SET @enddate = '2014-12-31' --最多只能产生 2005	8
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'

2000多行都是20年的数据了。这通常已经不是OLTP要做的统计了
---涛声依旧--- 2014-05-06
  • 打赏
  • 举报
回复

DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2000-01-01'
SET @enddate = '2014-12-31' --最多只能产生 2005	8
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'

---涛声依旧--- 2014-05-06
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
用这个代码可以生成指定日期之间的年月
DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2008-01-01'
SET @enddate = '2009-12-31'
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'
使用此方法须注意,如果超过了2506天就有问题了(master..spt_values最多有2506笔记录)
發糞塗牆 2014-05-06
  • 打赏
  • 举报
回复
用这个代码可以生成指定日期之间的年月
DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2008-01-01'
SET @enddate = '2009-12-31'
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'
發糞塗牆 2014-05-06
  • 打赏
  • 举报
回复
建一个参照表,只存放12个月,然后用这个表left join你的代码,没有匹配上的月份就会为null,然后用isnull来变成0
ruhong 2014-05-06
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
[quote=引用 4 楼 rockyljt 的回复:]

DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2000-01-01'
SET @enddate = '2014-12-31' --最多只能产生 2005	8
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'

2000多行都是20年的数据了。这通常已经不是OLTP要做的统计了[/quote] 版主大人我还问个问题, 比如现在我有一个with的递归,给他一个参数A,他就能得一些数据集, 现在我有三个参数,A,B,C 我想将这三个参数得出的数据集结果合并返回,如何做?
ruhong 2014-05-06
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
用这个代码可以生成指定日期之间的年月
DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2008-01-01'
SET @enddate = '2009-12-31'
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'
好的,我试试。
KeepSayingNo 2014-05-06
  • 打赏
  • 举报
回复
最好是通过你的起止时间自动生成你需要的月份保存到临时表中,然后用临时表左联接你最后得出有数据的表

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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