基于列值的SQL Server查询问题将结果填充到其他列中。我们可以加上日期

基于列值的SQL Server查询问题将结果填充到其他列中。我们可以加上日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,在附加的场景中,其中一列结果在其中一行中显示fail,其余所有场景将其显示为pass。在这种情况下,我需要在status列中填充,我需要将其显示为fail。如果用户通过了所有科目,则仅在针对所有科目的“状态”列中,我们需要将其显示为通过。您只需使用窗口功能检测学生是否在科目中失败,然后将状态设置为“失败”,如下所示: SELECT *, CASE WHEN SUM(CASE WHEN Result = 'Fail' THEN 1 ELSE 0 EN

在附加的场景中,其中一列结果在其中一行中显示fail,其余所有场景将其显示为pass。在这种情况下,我需要在status列中填充,我需要将其显示为fail。如果用户通过了所有科目,则仅在针对所有科目的“状态”列中,我们需要将其显示为通过。

您只需使用窗口功能检测学生是否在科目中失败,然后将状态设置为“失败”,如下所示:

SELECT *,
       CASE WHEN
                 SUM(CASE WHEN Result = 'Fail' THEN 1 ELSE 0 END) 
                       OVER(PARTITION BY StudentId ORDER BY StudentId)
                 = 0
            THEN 'Pass' 
            ELSE 'Fail' 
       END Status
FROM
(
  VALUES
  (1, 'Subject1', 'Fail'),
  (1, 'Subject2', 'Pass'),
  (1, 'Subject3', 'Pass'),
  (2, 'Subject1', 'Pass'),
  (2, 'Subject2', 'Pass'),
  (2, 'Subject3', 'Pass'),
  (3, 'Subject1', 'Fail'),
  (3, 'Subject2', 'Fail'),
  (3, 'Subject3', 'Fail')
) T(StudentId, Subject, Result);

不清楚您想要做什么,您是希望使用更新还是选择?另外,请不要将数据作为图像发布,而是将其作为格式化文本或DDL和DML发布,以让其他人进行测试并给出正确答案。我想写一个select语句select sno、SUBER、case当结果=失败时,然后从tbl1状态=失败,如果任何结果显示不同的值,如失败,通过然后对于相应的学生,我们需要将其显示为未通过状态,尽管他通过了所有剩余的科目,否则如果他通过了所有科目,并且在状态栏中所有记录都通过了,那么我们需要填充PASSAlright,那么您试图解决什么问题@Nandkishor Gati已尝试将字符串agg用作学生编号,并通过按sno分组,获得了所需的结果。对于这个sno,字符串agg将返回pass,fail,因此它是pass,fail…我可以将状态设置为fail。但我真正的挑战是我有100多个专栏和50亿条记录。所以我不认为我的解决方案是正确的这没有提供预期的结果这意味着什么@NandkishorGat?您的要求是,当一名学生在一门或多门课程中不及格时,其状态将为“不及格”。这就是查询所做的。选择AB.Number,string_aggtest,,“as Agg,case when string_aggtest,,”=“authorized”然后在string_aggtest时“authorized”,在“Cancelled,authorized”,然后在“authorized”,然后在“authorized”中作为状态结束,date-resno来自选择不同的数字,ResultStatusDescriptionn作为测试,UpdateDate作为日期,resno来自选择a.number,a.ResultNumber作为resno,ICMSDeterminandDescription,a.DTTimeStamp,a.ReceivedTimeStamp,-coalescedtimestamp,as test,MAXdTimeStamp超过ORDER BY number,statusdescription作为UpdateDate前无边界的行,已修改,statusdescription,ResultStatusDescription as ResultStatusDescription n,TestStatusDescription从A加入B在A.tb1=B.tb2上,其中A.Sno在'14038603'、'14282440'、'14282441'、'14282438'、'14282446'A.IsCurrentRecord=1按编号、日期顺序1这是查询的预期输出