如何在SQL

时间:2016-06-21 18:25:10

标签: sql sql-server

如屏幕截图所示,我有一个包含所有工作日(如果假期= 0)和假期(如果假期= 1)的表corporate_calender。
我想选择每个工作日的日期和最后的工作日日期 即我想在第二列中使用第一列的输出 我试过下面的查询,但它给出了错误。 “无效的列名称'workingday'。”

Select Date workingday,
       (select Max(Date)  
        from Corporate_Calendar 
        where holiday =0 
          and date>workingday)lastworkingday 
from Corporate_Calendar 
where holiday =0

enter image description here

1 个答案:

答案 0 :(得分:2)

您的问题是您创建了一个别名并尝试在内部查询中使用,而您无法做到这一点

还有一些修复

  • 日期是一个保​​留字,因此应该包含[Date]或更好,但使用其他名称
  • 使用别名在外部和内部使用相同的表
    • CC1和CC2

Select cc1.[Date] workingday,
      ( select Max(cc2.[Date])  
        from Corporate_Calendar  cc2
        where cc2.[holiday] = 0 
          and cc2.[date] > cc1.[Date]
                                ^^^^ cant use the alias
      ) as lastworkingday 
from Corporate_Calendar cc1
where cc1.[holiday] = 0

如果你想使用别名,你需要将其包装为子查询。

 SELECT *
 FROM (SELECT cc1.[Date] as workingDay
       FROM Corporate_Calendar as cc1
      ) T
 WHERE T.workingDay > 0