如何使用SQL Server 2016为嵌套的SELECT语句创建for或while循环
对不起,伙计们,我想我被困在杂草丛中了。对于in函数中的值,是否有方法为嵌套SELECT语句中的每个值执行FOR或WHILE循环我需要获取in函数中每个“日期范围”的最大值(重新提交)。现在,对于in函数中的所有值,我得到一个最大值,这是不正确的 任何帮助/指导都将不胜感激。先谢谢你 这是我的整个WHERE条款:如何使用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
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。为了提高获得有用建议的机会(并减少回答者的猜测),最好包括表结构、显示问题的示例数据、给定示例数据的预期输出,以及您尝试过的完整查询以及不起作用的内容。如果您收到错误消息,那么您应该包括确切的错误消息。有关更多信息,请参阅:谢谢您的信息,汤姆。谢谢选项卡。我感谢你的时间和帮助。我试试。谢谢。我感谢你的时间和帮助。我会试试看。我看不出这是如何达到最大值()的目标的。我看不出这是如何达到最大值()的目标的。