首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL联接日历表和结果表

MSSQL联接日历表和结果表
EN

Stack Overflow用户
提问于 2022-02-17 13:29:18
回答 1查看 55关注 0票数 0

我请求你对此作出善意的解释。

我有一个日历表,每天都有一排。此外,我还有一个包含备份结果的表,其中存储了备份开始的日期和时间。

我的目标是取得这样的结果:

代码语言:javascript
复制
date of month | serverid | datetime of backup | result | note (not in table, for info only)
2022-02-02    |       11 | 2022-02-02 19:00   | OK     | backup was successful
2022-02-03    |     NULL | NULL               | NULL   | backup was not even start
2022-02-04    |       11 | 2022-02-04 19:00   | FAILED | backup started but error occured

我试过左外连接和外接。左外部联接没有返回未启动备份的空行,外部应用程序运行得更好,但是当我按年份、月份(从日历表)和服务器筛选结果时,空行也会消失。

因此,我的目标是选择指定月份和年份中日历表中的所有行,并通过backup列将结果分配给它们,以查看未启动备份的天数。

请你指出正确的方向好吗?

向你问好,简

查询示例:

代码语言:javascript
复制
SELECT        [SqlDt], [Year], [Month], A.*
FROM            [portal].[dbo].[Calendar] C OUTER APPLY
                             (SELECT        *
                               FROM            [DS-Backup] D
                               WHERE        [C].[SqlDt] = CAST(D .VersionDate AS Date)) A


SELECT        dbo.Calendar.SqlDt, dbo.Calendar.Year, dbo.Calendar.Month, dbo.[DS-Backup].EID, dbo.[DS-Backup].VersionDate, dbo.[DS-Backup].VersionStatus
FROM            dbo.Calendar LEFT OUTER JOIN
                         dbo.[DS-Backup] ON dbo.Calendar.SqlDt = CAST(dbo.[DS-Backup].VersionDate AS Date)
EN

回答 1

Stack Overflow用户

发布于 2022-02-17 15:59:52

感谢所有有用的逗号,我没有在加入前用备份结果过滤表。

现在它正按照我想要的方式工作:

代码语言:javascript
复制
    SELECT [SqlDt],[Year],[Month],[Backups].*
  FROM [portal].[dbo].[Calendar] 
  LEFT JOIN ( SELECT * FROM [portal].[dbo].[DS-WindowsServerBackup] WHERE EID=11) as Backups
  ON Calendar.SqlDt = CAST([Backups].[VersionDate] as Date)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71159055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档