Sql server TSQL:从两个单独的表中创建具有计算列的视图

Sql server TSQL:从两个单独的表中创建具有计算列的视图,sql-server,tsql,Sql Server,Tsql,我使用以下代码创建了一个名为TaxLots的表: CREATE TABLE Portfolio.TaxLots ( Ticker varchar(22) NOT NULL, SecurityDescription varchar(50) NOT NULL, Class varchar(15) NULL, Ccy varchar(5) NULL, LSPosition char(3) NULL, Date date NULL, Quantit

我使用以下代码创建了一个名为TaxLots的表:

CREATE TABLE Portfolio.TaxLots
(
    Ticker varchar(22) NOT NULL,
    SecurityDescription varchar(50) NOT NULL,
    Class varchar(15) NULL,
    Ccy varchar(5) NULL,
    LSPosition char(3) NULL,
    Date date NULL,
    Quantity int NULL,
    LocAvgCost decimal(8,3) NULL,
    LocTaxCostBasis int NULL,
    LocMktVal int NULL,
    BaseAvgCost decimal(8,3) NULL,
    BaseTaxCostBasis int NULL,
    BaseMktVal int NULL,
    BaseUNRL int NULL,
    DateCreated DATE NOT NULL DEFAULT Cast(GetDate() as Date)
)
GO
然后,我创建了第二个名为BusinessDates的表,我使用以下代码创建了该表:

CREATE TABLE Portfolio.BusinessDates
(
    Date date NOT NULL,
)
GO
我用所有相关数据填充了这两个表,现在我想创建一个名为TaxLotsHistory的视图,该视图包含Taxlots表中的所有列,以及一个名为ReportDate的附加列,该列从BusinessDates表中提取DateCreated之前的最后一个业务日期

例如:如果创建日期为2016-08-15,则报告日期应为2016-08-12。从逻辑上讲

ReportDate = Max(BusinessDate) 
where BusinessDate < DateCreated
我现在得到一份工作

关键字“AS”附近的语法错误

但我肯定代码还有其他问题。谢谢。

试试这个

CREATE VIEW Portfolio.TaxLotsHistory
AS
Select  Ticker, SecurityDescription, Class, Ccy, LSPosition, Date, Quantity, 
LocAvgCost, LocTaxCostBasis, LocMktVal, BaseAvgCost, BaseTaxCostBasis, 
BaseMktVal, BaseUNRL, DateCreated,
( Select Max(D.BusinessDate) 
  From Portfolio.BusinessDates D
  Where D.BusinessDate) < T.DateCreated ) As ReportDate
From Portfolio.TaxLots T
试试这个

CREATE VIEW Portfolio.TaxLotsHistory
AS
Select  Ticker, SecurityDescription, Class, Ccy, LSPosition, Date, Quantity, 
LocAvgCost, LocTaxCostBasis, LocMktVal, BaseAvgCost, BaseTaxCostBasis, 
BaseMktVal, BaseUNRL, DateCreated,
( Select Max(D.BusinessDate) 
  From Portfolio.BusinessDates D
  Where D.BusinessDate) < T.DateCreated ) As ReportDate
From Portfolio.TaxLots T
使用Apply

Create view vwname as
Select  Ticker, SecurityDescription, Class, Ccy, LSPosition, Date, Quantity, 
LocAvgCost, LocTaxCostBasis, LocMktVal, BaseAvgCost, BaseTaxCostBasis, 
BaseMktVal, BaseUNRL, DateCreated,b.reportdate
from
Portfolio.TaxLots t
cross apply
(
(Select Max (BusinessDate) As ReportDate  From Portfolio.BusinessDates D 
Where D.BusinessDate) < T.DateCreated
) b
使用Apply

Create view vwname as
Select  Ticker, SecurityDescription, Class, Ccy, LSPosition, Date, Quantity, 
LocAvgCost, LocTaxCostBasis, LocMktVal, BaseAvgCost, BaseTaxCostBasis, 
BaseMktVal, BaseUNRL, DateCreated,b.reportdate
from
Portfolio.TaxLots t
cross apply
(
(Select Max (BusinessDate) As ReportDate  From Portfolio.BusinessDates D 
Where D.BusinessDate) < T.DateCreated
) b
看起来您正在最内部的SELECT中为表定义两个别名:FROM Portfolio.BusinessDates D As ReportDate-或者仅使用D作为别名,或者用作ReportDate-但不能同时用作两者…..看起来您在最内层的SELECT中为表定义了两个别名:FROM POLISOL.BusinessDates D作为ReportDate-或者仅将D用作别名,或者用作ReportDate-但不能同时用作这两个别名。。。。。