Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft SQL MAX()不包括具有空值的行_Sql_Sql Server_Null_Max - Fatal编程技术网

Microsoft SQL MAX()不包括具有空值的行

Microsoft SQL MAX()不包括具有空值的行,sql,sql-server,null,max,Sql,Sql Server,Null,Max,我在一家律师事务所工作,那里有一个案例管理系统,它将一个接口链接到SQL数据库。我正在SSRS中编写查询以运行报告。我正在尝试运行一个关于案例信息的报告。有些信息在cases表或vcases视图中是正确的,但我也尝试链接requirements\u offers表中的信息。每个案例都可以有多个需求和报价,因此我在连接中使用MAX函数来提取每个案例的最新需求记录。不幸的是,这样做可以消除没有需求的情况。我需要所有的箱子都来 我曾尝试使用MAX函数中嵌套的CASE语句将null或空字段转换为随机的早

我在一家律师事务所工作,那里有一个案例管理系统,它将一个接口链接到SQL数据库。我正在SSRS中编写查询以运行报告。我正在尝试运行一个关于案例信息的报告。有些信息在cases表或vcases视图中是正确的,但我也尝试链接requirements\u offers表中的信息。每个案例都可以有多个需求和报价,因此我在连接中使用MAX函数来提取每个案例的最新需求记录。不幸的是,这样做可以消除没有需求的情况。我需要所有的箱子都来

我曾尝试使用MAX函数中嵌套的CASE语句将null或空字段转换为随机的早期日期,但仍然无法使所有的CASE都显示在报告中

有什么想法吗?我是SQL方面的新手,没有接受过正式培训。任何帮助都将不胜感激。您可以看到下面的代码。另外,我认为我无权创建临时表

SELECT vc.case_number AS "Matter ID", vc.style, vc.atty2_name AS "Handling Attorney", m.max_demands_date, do.demands, do.demands_notes, sa.authorized,      
(SELECT TOP 1 vl.computename        
FROM vcases vca     
LEFT OUTER JOIN case_parties cp     
ON vca.case_sk = cp.case_sk     
JOIN case_parties cpp       
ON cp.parent_sk = cpp.case_parties_sk       
JOIN vlegal_entity vl       
ON vl.legal_entity_sk = cp.entity_sk        
JOIN vlegal_entity vlp      
ON vlp.legal_entity_sk = cpp.entity_sk      
WHERE (vca.case_sk = vc.case_sk) AND (cpp.role_sk = '3557') AND (cp.role_sk = '3986') ) AS "Plaintiff//'s Attorney",        
(SELECT cp.reference_number     
    FROM cases AS ca    
        LEFT OUTER JOIN case_parties AS cp
        ON ca.case_sk = cp.case_sk
    WHERE (cp.role_sk = '3706')     
        AND (ca.case_sk = vc.case_sk)) AS "Claim Number"


FROM        
vcases vc       
LEFT OUTER JOIN     
case_parties cp ON vc.case_sk = cp.case_sk      
LEFT OUTER JOIN     
vlegal_entity vl ON cp.entity_sk = vl.legal_entity_sk       
LEFT OUTER JOIN     
settle_authority sa ON vc.case_sk = sa.case_sk      
LEFT OUTER JOIN         
demands_offers do ON vc.case_sk = do.case_sk        

INNER JOIN      
 (SELECT DISTINCT max(
(CASE WHEN do.demands_date = '' THEN '1/1/1900 00:00:00'
             ELSE do.demands_date
              END)
  ) as "max_demands_date", vc.case_sk       
   FROM vcases AS vc        
   JOIN demands_offers AS do ON vc.case_sk = do.case_sk     
   GROUP BY vc.case_sk) AS m        
  ON vc.case_sk = m.case_sk  AND        
  do.demands_date = m.max_demands_date      

WHERE (vc.closed_ind = 'O') AND (cp.role_sk = '3816') AND (vl.client_number = 'EAS-01') AND (vc.lawtype_code <> 'FA')       
ORDER BY vc.case_number 

您的查询可能编写得更紧凑、性能更好,但首先,这是删除行而不需要的部分:

INNER JOIN      
 (SELECT DISTINCT max(
(CASE WHEN do.demands_date = '' THEN '1/1/1900 00:00:00'
             ELSE do.demands_date
              END)
  ) as "max_demands_date", vc.case_sk       
   FROM vcases AS vc        
   JOIN demands_offers AS do ON vc.case_sk = do.case_sk     
   GROUP BY vc.case_sk) AS m        
  ON vc.case_sk = m.case_sk  AND        
  do.demands_date = m.max_demands_date 
这是必须的

LEFT JOIN      
 (SELECT DISTINCT max(
(CASE WHEN do.demands_date = '' THEN '1/1/1900 00:00:00'
             ELSE do.demands_date
              END)
  ) as "max_demands_date", vc.case_sk       
   FROM vcases AS vc        
   JOIN demands_offers AS do ON vc.case_sk = do.case_sk     
   GROUP BY vc.case_sk) AS m        
  ON vc.case_sk = m.case_sk  AND        
  do.demands_date = m.max_demands_date 

原因是A内部联接B仅在可以将A中的行与B中的行进行匹配时才保留记录。当没有需求时,派生表子查询会为max_demands_date返回NULL,而do.demands_date=m.max_demands_date无法匹配该值。这会导致案例记录被删除。

嗯,max的行为是忽略空值。另外,除非您使用的是Oracle,否则null和都是不同的。非常感谢您!!!!!!!!!!!!我知道我错过了一些非常简单的事情。谢谢你解释逻辑。这有助于我理解为什么以及如何在将来避免同样的问题,和/或在我需要这种结果时故意重现问题。我的大部分SQL知识都来自Visual Quickstart Guide、MSDN.com和各种论坛。如果你知道一个好的班级,请随时发送或张贴信息。谢谢我刚开始写一篇关于JOINs的介绍。这是一系列的博客文章,在这个月里每天都有一篇。你可以在这里找到它们