如何包括一个;或;SQL中的语句,用于;“没有价值”;

如何包括一个;或;SQL中的语句,用于;“没有价值”;,sql,sql-server,Sql,Sql Server,我有一个SQL脚本,告诉我我的任何员工是否有在过去48小时内未更新的未结服务订单。看起来像这样(简化)- 它基本上只取今天的日期,减去最近一张便笺最后修改的日期,并吐出48小时内未修改的服务订单数量 我的问题是,如果服务订单没有注释,则此脚本无法工作。因此,即使48小时内没有更新,也没有在报告中公布。什么样的“或”我需要说“也告诉我,如果它没有笔记。” 我想加入另一个包含“DateOpen”字段的表,然后 OR (DATEDIFF(day,(NotesTable.DateOpened),GETD

我有一个SQL脚本,告诉我我的任何员工是否有在过去48小时内未更新的未结服务订单。看起来像这样(简化)-

它基本上只取今天的日期,减去最近一张便笺最后修改的日期,并吐出48小时内未修改的服务订单数量

我的问题是,如果服务订单没有注释,则此脚本无法工作。因此,即使48小时内没有更新,也没有在报告中公布。什么样的“或”我需要说“也告诉我,如果它没有笔记。”

我想加入另一个包含“DateOpen”字段的表,然后

OR (DATEDIFF(day,(NotesTable.DateOpened),GETDATE()) >2)
但这会返回所有超过48小时的服务订单,所以这没有帮助


想法?

如果[Orders]表中的每条记录在默认情况下都有一条[NotesTable]记录,那么这将起作用

将[NotesTable].[LastModified]更改为Isnull([NotesTable].[LastModified],[NotesTable].[DateOpen])

如果存在“LastModified”,则将使用“LastModified”;如果不存在,则将使用“DateOpen”。

如果[Orders]表中的每条记录默认都有一条[NotesTable]记录,则这将起作用

将[NotesTable].[LastModified]更改为Isnull([NotesTable].[LastModified],[NotesTable].[DateOpen])
如果“LastModified”存在,则使用它;如果不存在,则使用“DateOpen”。

您可以使用ISNULL()

您可以使用ISNULL()


实际上,您仍然缺少部分查询(例如,
分组依据
),但这应该会让您了解您想要什么:

SELECT ServiceOrder, RepName 
FROM OrdersTable 
LEFT JOIN NotesTable
    ON OrdersTable.OrderNumber = NotesTable.OrderNumber
GROUP BY ServiceOrder, RepName 
HAVING (DATEDIFF(DAY,MAX(NotesTable.LastModified),GETDATE()) >2)
OR MAX(NotesTable.LastModified) IS NULL

实际上,您仍然缺少部分查询(例如,
分组依据
),但这应该会让您了解您想要什么:

SELECT ServiceOrder, RepName 
FROM OrdersTable 
LEFT JOIN NotesTable
    ON OrdersTable.OrderNumber = NotesTable.OrderNumber
GROUP BY ServiceOrder, RepName 
HAVING (DATEDIFF(DAY,MAX(NotesTable.LastModified),GETDATE()) >2)
OR MAX(NotesTable.LastModified) IS NULL

您需要包括与notes相关的其他表。也许这是订单台?希望该表有一些字段来指示上次修改的时间

    select ServiceOrder, RepName from Orders
    left outer join NotesTable
    on Orders.OrderID = NotesTable.OrderID


    having (DATEDIFF(day,max(Coalesce(NotesTable.LastModified,
       Orders.LastModified)),GETDATE()) >2)

您可能需要执行一个case语句,而不是合并,以查看最后修改的日期中哪一个是最近的。

您需要包括与notes相关的其他表。也许这是订单台?希望该表有一些字段来指示上次修改的时间

    select ServiceOrder, RepName from Orders
    left outer join NotesTable
    on Orders.OrderID = NotesTable.OrderID


    having (DATEDIFF(day,max(Coalesce(NotesTable.LastModified,
       Orders.LastModified)),GETDATE()) >2)


您可能需要做一个案例陈述,而不是合并,以查看最后修改的日期中哪一个是最近的。

您可以发布有关您的模型的更多信息吗?“如果服务订单没有备注”是什么意思?您需要提供更多信息。您提供的查询显然不完整,如果看不到更多内容,则此问题太难(或可能不可能)回答。您的查询无法编译,因此我无法理解您想要什么。您查询的表不正确。如果要获取所有ServiceOrders,无论notes表中是否存在相关记录,都需要查询service orders表,而不是notes表。将服务订单表连接到notes表。您应该发布表结构和一些示例数据。是否可以发布有关您的模型的更多信息?“如果服务订单没有备注”是什么意思?您需要提供更多信息。您提供的查询显然不完整,如果看不到更多内容,则此问题太难(或可能不可能)回答。您的查询无法编译,因此我无法理解您想要什么。您查询的表不正确。如果要获取所有ServiceOrders,无论notes表中是否存在相关记录,都需要查询service orders表,而不是notes表。将service orders表连接到notes表。您应该发布表结构和一些示例数据。如果op说某个订单没有notes,那么这意味着表上没有行
NotesTable
?@Lamak我假设[NotesTable]中存在的所有记录都应该有一个“LastModified”值作为活动发生在该列上,并且该列的Null值只应持续到某个活动发生时,在这种情况下,我想Zac希望它出现在该报告上。我认为您关心的场景是,如果您将其他表加入NotesTable,但是在这种情况下,“DateOpened”仍然为空,因此它不符合Having条件。但是您假设每个订单在表
NotesTable
上都有一条记录,即使它没有notes?,这是一个很大的假设(这就是人们要求澄清的原因)。@Lamak The[NotesTable]有一个名为[DateOpen]的专栏,他在将逻辑更改为[DateOpen]时说它包括所有超过两天的东西。我不认为这是一个很大的延伸。我理解你的观点,但我不认为我的推断太牵强。好吧,也许你的推断没有那么牵强。但我宁愿让op验证这是正确的方法,如果op说订单没有注释,会发生什么,不是吗当它意味着表中没有行时,
NotesTable
?@Lamak我假设[NotesTable]中存在的所有记录都应该有一个“lastdimited”值作为活动发生在该列上,并且该列的空值只应持续到某个活动发生时,在这种情况下,我认为Zac希望它出现在该报表上。我认为您关心的场景是,如果您将某个其他表加入NotesTable,但在本例中是“DateOpen”仍然为空,因此不符合Having标准。但是您假设每个订单在表上都有一条记录
NotesTable
,即使它没有notes?,这是一个很大的假设(这就是人们要求澄清的原因)。@Lamak the[NotesTable]有一个名为[DateOpen]的列他还说,当他将逻辑更改为[日期打开]时,它包括了所有超过两个日期的内容