如何使用SQL Server 2016为嵌套的SELECT语句创建for或while循环

如何使用SQL Server 2016为嵌套的SELECT语句创建for或while循环,sql,sql-server,Sql,Sql Server,对不起,伙计们,我想我被困在杂草丛中了。对于in函数中的值,是否有方法为嵌套SELECT语句中的每个值执行FOR或WHILE循环我需要获取in函数中每个“日期范围”的最大值(重新提交)。现在,对于in函数中的所有值,我得到一个最大值,这是不正确的 任何帮助/指导都将不胜感激。先谢谢你 这是我的整个WHERE条款: WHERE r425.SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '201

对不起,伙计们,我想我被困在杂草丛中了。对于in函数中的值,是否有方法为嵌套SELECT语句中的每个值执行FOR或WHILE循环我需要获取in函数中每个“日期范围”的最大值(重新提交)。现在,对于in函数中的所有值,我得到一个最大值,这是不正确的

任何帮助/指导都将不胜感激。先谢谢你

这是我的整个WHERE条款:

WHERE r425.SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', 
'2014-2015', '2015-2016')
AND r425.SUBMISSION = 3
AND r425.RESUBMISSION != 5
AND r425.RESUBMISSION = (**SELECT MAX(RESUBMISSION) FROM [Peims_SIS].[dbo].RECORD425 WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016') AND SUBMISSION = 3**)
AND r425.DISACTIONCODE IN ('05', '06')
AND r101.SUBMISSION = 3
AND r101.RESUBMISSION = (**SELECT MAX(RESUBMISSION) FROM [Peims_SIS].[dbo].RECORD101 WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016') AND SUBMISSION = 3**)   
AND r020.SUBMISSION = 3

你不需要一个循环。您只需要将子查询与外部查询关联起来

以下是第一个示例:

AND r425.RESUBMISSION = (
  SELECT MAX(RESUBMISSION) 
  FROM [Peims_SIS].[dbo].RECORD425 r425b 
  WHERE r425b.SCHYEAR=r425.SCHYEAR
  AND SUBMISSION = 3
)

我的子查询中WHERE子句的第一行使子查询获得外部查询正在查看的当前
SCHYEAR
MAX(重新提交)

不需要循环。您只需要将子查询与外部查询关联起来

以下是第一个示例:

AND r425.RESUBMISSION = (
  SELECT MAX(RESUBMISSION) 
  FROM [Peims_SIS].[dbo].RECORD425 r425b 
  WHERE r425b.SCHYEAR=r425.SCHYEAR
  AND SUBMISSION = 3
)

我的子查询中WHERE子句的第一行使子查询获得外部查询正在查看的当前
SCHYEAR
MAX(重新提交)

您需要加入,而不是使用WHERE

记住,在SQL中没有循环,只有行

大概是这样的:

FROM TABLE X
JOIN (SELECT RESUBMISSION 
      FROM [Peims_SIS].[dbo].RECORD425 
      WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016')
       AND SUBMISSION = 3) A ON r425.RESUBMISSION = A.RESUBMISSION
JOIN (SELECT RESUBMISSION 
      FROM [Peims_SIS].[dbo].RECORD101 
      WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016') 
        AND SUBMISSION = 3) B ON AND r101.RESUBMISSION = B.RESUBMISSION
WHERE r425.SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', 
'2014-2015', '2015-2016')
AND r425.SUBMISSION = 3
AND r425.RESUBMISSION != 5
AND r425.DISACTIONCODE IN ('05', '06')
AND r101.SUBMISSION = 3
AND r020.SUBMISSION = 3

您需要加入,而不是使用where

记住,在SQL中没有循环,只有行

大概是这样的:

FROM TABLE X
JOIN (SELECT RESUBMISSION 
      FROM [Peims_SIS].[dbo].RECORD425 
      WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016')
       AND SUBMISSION = 3) A ON r425.RESUBMISSION = A.RESUBMISSION
JOIN (SELECT RESUBMISSION 
      FROM [Peims_SIS].[dbo].RECORD101 
      WHERE SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', '2014-2015', '2015-2016') 
        AND SUBMISSION = 3) B ON AND r101.RESUBMISSION = B.RESUBMISSION
WHERE r425.SCHYEAR IN('2010-2011', '2011-2012', '2012-2013', '2013-2014', 
'2014-2015', '2015-2016')
AND r425.SUBMISSION = 3
AND r425.RESUBMISSION != 5
AND r425.DISACTIONCODE IN ('05', '06')
AND r101.SUBMISSION = 3
AND r020.SUBMISSION = 3

为了提高获得有用建议的机会(并减少回答者的猜测),最好包括表结构、显示问题的示例数据、给定示例数据的预期输出,以及您尝试过的完整查询以及不起作用的内容。如果您收到错误消息,那么您应该包括确切的错误消息。有关更多信息,请参阅:感谢您提供的信息Tom。为了提高获得有用建议的机会(并减少回答者的猜测),最好包括表结构、显示问题的示例数据、给定示例数据的预期输出,以及您尝试过的完整查询以及不起作用的内容。如果您收到错误消息,那么您应该包括确切的错误消息。有关更多信息,请参阅:谢谢您的信息,汤姆。谢谢选项卡。我感谢你的时间和帮助。我试试。谢谢。我感谢你的时间和帮助。我会试试看。我看不出这是如何达到最大值()的目标的。我看不出这是如何达到最大值()的目标的。