SQL-添加空白列并基于计算的datediff列中的值进行填充
我是SQL新手,也是自学成才的……所以请说清楚。 我试图在我的数据中添加一个空白列,该列将显示“天数”列中的数字是否为: 15-21天之间为15-21天 ,22-28天为22-28天 超过28天的违约时间 我可以使用SQL-添加空白列并基于计算的datediff列中的值进行填充,sql,sql-server,tsql,Sql,Sql Server,Tsql,我是SQL新手,也是自学成才的……所以请说清楚。 我试图在我的数据中添加一个空白列,该列将显示“天数”列中的数字是否为: 15-21天之间为15-21天 ,22-28天为22-28天 超过28天的违约时间 我可以使用''作为状态获得一个空白列。我只需要知道如何填充它 declare @HG Varchar (100) set @HG = 'Clinical Support - Health Group' SELECT distinct OURREF as [DATIX ref], DAT
''作为状态获得一个空白列
。我只需要知道如何填充它
declare @HG Varchar (100)
set @HG = 'Clinical Support - Health Group'
SELECT distinct OURREF as [DATIX ref], DATE_OPENED as [Date opened (dd/mm/yyyy)], DATE_OF_INCIDENT as [Incident date], ORGANISATION AS [Health Group], DIRECTORATE as [Division], SPECIALTY as [Specialty], ACTUAL_LOCATION As [Exact location], SEVERITY as [Severity], DATEDIFF(Day, DATE_OPENED, CURRENT_TIMESTAMP) as Days, INCIDENT_TYPE as [Type], CATEGORY as [Category], SUBCATEGORY as [sub Category], APPROVED_CODE as [Current approval status], inc_mgr AS [Handler]
FROM [CDI_PATEX_INCIDENTS] AS a
JOIN dbo.DATIX_incidents_main b on a.OURREF = b.inc_ourref
where OURREF not like 'SUI%' and APPROVED_CODE in ('INREV') and ORGANISATION in (@HG)
and DATEDIFF(dd,DATE_OPENED,GETDATE()) between 15 and 21
UNION
SELECT distinct OURREF as [DATIX ref], DATE_OPENED as [Date opened (dd/mm/yyyy)], DATE_OF_INCIDENT as [Incident date], ORGANISATION AS [Health Group], DIRECTORATE as [Division], SPECIALTY as [Specialty], ACTUAL_LOCATION As [Exact location], SEVERITY as [Severity], DATEDIFF(Day, DATE_OPENED, CURRENT_TIMESTAMP) as Days, INCIDENT_TYPE as [Type], CATEGORY as [Category], SUBCATEGORY as [sub Category], APPROVED_CODE as [Current approval status], inc_mgr AS [Handler]
FROM [CDI_PATEX_INCIDENTS] AS a
JOIN dbo.DATIX_incidents_main b on a.OURREF = b.inc_ourref
where OURREF not like 'SUI%' and APPROVED_CODE in ('INREV') and ORGANISATION in (@HG)
and DATEDIFF(dd,date_reported,GETDATE()) between 21 and 28
UNION
SELECT distinct OURREF as [DATIX ref], DATE_OPENED as [Date opened (dd/mm/yyyy)], DATE_OF_INCIDENT as [Incident date], ORGANISATION AS [Health Group], DIRECTORATE as [Division], SPECIALTY as [Specialty], ACTUAL_LOCATION As [Exact location], SEVERITY as [Severity], DATEDIFF(Day, DATE_OPENED, CURRENT_TIMESTAMP) as Days, INCIDENT_TYPE as [Type], CATEGORY as [Category], SUBCATEGORY as [sub Category], APPROVED_CODE as [Current approval status], inc_mgr AS [Handler]
FROM [CDI_PATEX_INCIDENTS] AS a
JOIN dbo.DATIX_incidents_main b on a.OURREF = b.inc_ourref
where OURREF not like 'SUI%' and APPROVED_CODE in ('INREV') and ORGANISATION in (@HG)
and DATEDIFF(dd,DATE_OPENED,GETDATE()) > 28
Group by OURREF, SPECIALTY, ORGANISATION, SEVERITY, DIRECTORATE, DATE_OPENED, DATE_OF_INCIDENT, ACTUAL_LOCATION, INCIDENT_TYPE, CATEGORY, SUBCATEGORY, DATE_REPORTED, APPROVED_CODE, inc_mgr
Order by Days desc
为什么不在一次选择中完成它们,而不使用联合,并使用这种技术呢
select
....,
case when DATEDIFF(dd, DATE_OPENED, GETDATE()) BETWEEN 21 AND 28 then 'x'
when DATEDIFF(dd, DATE_OPENED, GETDATE()) > 28 then 'y'
else 'z' end as Status
from tablex
为什么要按分组?我找不到任何聚合函数。无需在此处选择distinct,
UNION
将在最后删除所有重复的函数。您使用的是哪种dbms,MySQL还是MS SQL Server?要获得更好的答案,请更快地简化问题!没有别的原因,只是因为我对这个很陌生。。。。