关于tsql:按DAY,MONTH,YEAR分组时,sql缺少行

关于tsql:按DAY,MONTH,YEAR分组时,sql缺少行

sql missing rows when grouped by DAY, MONTH, YEAR

如果我按月,日,年从表组中选择,
它仅返回带有记录的行,而忽略不包含任何记录的组合,从而使您一目了然地每天或每个月都有活动,因此必须主动查看日期列以查找差距。在T-SQL中,即使没有数据,我如何每天/每月/每年都获得一行?


创建日历表并在该表上进行外部联接


我的开发人员使用此代码返回我,下划线转换为破折号,因为StackOverflow正在处理下划线-不需要数字表。我们的示例由于连接到另一个表而变得有些复杂,但是也许该代码示例有一天会帮助某个人。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare @career-fair-id int
select @career-fair-id = 125

create table #data ([date] datetime null, [cumulative] int null)

declare @event-date datetime, @current-process-date datetime, @day-count int
select @event-date = (select careerfairdate from tbl-career-fair where careerfairid = @career-fair-id)
select @current-process-date = dateadd(day, -90, @event-date)

    while @event-date <> @current-process-date
    begin
    select @current-process-date = dateadd(day, 1, @current-process-date)
    select @day-count = (select count(*) from tbl-career-fair-junction where attendanceregister <= @current-process-date and careerfairid = @career-fair-id)
        if @current-process-date <= getdate()
        insert into #data ([date], [cumulative]) values(@current-process-date, @day-count)
    end

    select * from #data
    drop table #data

该任务要求将完整的日期集左连接到您的数据上,例如


DECLARE @StartInt int
DECLARE @Increment int
DECLARE @Iterations int

SET @StartInt = 0
SET @Increment = 1
SET @Iterations = 365

SELECT
tCompleteDateSet.[Date]
,AggregatedMeasure = SUM(ISNULL(t.Data, 0))
FROM
(
SELECT
[Date] = dateadd(dd,GeneratedInt, @StartDate)
FROM
[dbo].[tvfUtilGenerateIntegerList] (
@StartInt,
,@Increment,
,@Iterations
)
) tCompleteDateSet
LEFT JOIN tblData t
ON (t.[Date] = tCompleteDateSet.[Date])
GROUP BY
tCompleteDateSet.[Date]

其中表值函数tvfUtilGenerateIntegerList定义为


-- Example Inputs

-- DECLARE @StartInt int
-- DECLARE @Increment int
-- DECLARE @Iterations int
-- SET @StartInt = 56200
-- SET @Increment = 1
-- SET @Iterations = 400
-- DECLARE @tblResults TABLE
-- (
-- IterationId int identity(1,1),
-- GeneratedInt int
-- )

-- =============================================
-- Author: 6eorge Jetson
-- Create date: 11/22/3333
-- Description: Generates and returns the desired list of integers as a table
-- =============================================
CREATE FUNCTION [dbo].[tvfUtilGenerateIntegerList]
(
@StartInt int,
@Increment int,
@Iterations int
)
RETURNS
@tblResults TABLE
(
IterationId int identity(1,1),
GeneratedInt int
)
AS
BEGIN

DECLARE @counter int
SET @counter= 0
WHILE (@counter < @Iterations)
BEGIN
INSERT @tblResults(GeneratedInt) VALUES(@StartInt + @counter*@Increment)
SET @counter = @counter + 1
END

RETURN
END
--Debug
--SELECT * FROM @tblResults


基于SQLMenace所说的内容,您可以使用CROSS JOIN快速填充表或在内存中有效地创建表。
http://www.sitepoint.com/forums/showthread.php?t=562806


使用数字表。尽管这可能有点骇人听闻,但这是我快速查询丢失的数据,显示所有日期或要检查范围内值的任何方法的最佳方法,无论是否使用了该范围内的所有值。铅>


推荐阅读

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux组合命令别名?

    linux组合命令别名?,系统,别名,地方,环境,工作,新增,命令,终端,文件,环境变

    linux命令日期修改?

    linux命令日期修改?,时间,系统,电脑,信息,命令,标准,文件,终端,日期,时分,LIN

    linux切换日期命令?

    linux切换日期命令?,时间,系统,信息,命令,城市,终端,时分,日期,窗口,操作系

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux设置日期命令?

    linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详

    linux清空表数据命令?

    linux清空表数据命令?,系统,数据,软件,名称,不了,命令,文件,电脑,地址,位置,L

    linux拷贝数据命令?

    linux拷贝数据命令?,系统,地址,文件,数据,命令,目录,服务,基本知识,项目,密

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux命令进去数据库?

    linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

    linux数据库基础命令?

    linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux数据共享命令?

    linux数据共享命令?,情况,系统,工具,网络,数据,软件,发行,设备,命令,文件,Lin

    linux打印日期命令?

    linux打印日期命令?,时间,系统,工作,命令,标准,环境,档案,信息,设备,位置,Lin

    linux基本命令日期?

    linux基本命令日期?,时间,系统,命令,管理,工作,网络,工具,基础,标准,环境,详

    命令发送数据linux?

    命令发送数据linux?,数据,地址,时间,工具,系统,设计,工作,网络,命令,综合,lin

    数据库导出命令linux?

    数据库导出命令linux?,数据,系统,名称,密码,软件,服务,情况,网上,工具,文件,L

    linux命令清空数据?

    linux命令清空数据?,服务,数据,名称,不了,百度,管理,档案,产品,命令,文件,删

    linux大数据在线命令?

    linux大数据在线命令?,工作,地址,系统,信息,管理,命令,数据,在线,目录,网络,l