2016-08-16 2 views
0

У меня есть таблица с именем TaxLots, который я создал с помощью этого кода:TSQL: Создание представления с вычисляемым столбцом из двух отдельных таблиц

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 и дополнительного вызова столбца ed ReportDate, который вытаскивает последнюю деловую дату из таблицы BusinessDates до DateCreated.

Например: если DateCreated - 2016-08-15, то ReportDate должен быть 2016-08-12. Логически

ReportDate = Max(BusinessDate) 
where BusinessDate < DateCreated 

но учитывая BusinessDate и DateCreated находятся в двух отдельных таблицах, у меня возникают проблемы, выяснить синтаксис. У меня было что-то вдоль линий этого, но он не работает:

CREATE VIEW Portfolio.TaxLotsHistory 
AS 
    SELECT 
     Ticker, SecurityDescription, Class, Ccy, LSPosition, Date, Quantity, 
     LocAvgCost, LocTaxCostBasis, LocMktVal, BaseAvgCost, BaseTaxCostBasis, 
     BaseMktVal, BaseUNRL, DateCreated, 
     (SELECT MAX(BusinessDate) 
     FROM Portfolio.BusinessDates D As ReportDate 
     WHERE D.BusinessDate) < T.DateCreated 
    FROM 
     Portfolio.TaxLots T 

В настоящее время я получаю сообщение об ошибке Неверный синтаксис

около ключевого слова «AS»

но я «Конечно, в коде есть другие вещи. Благодарю.

+1

Похоже, вы определяете ** два псевдонима ** за столом во внутреннем большинстве 'SELECT':' FROM портфолио. BusinessDates D As ReportDate' - либо используйте только 'D' для псевдонима, либо используйте' AS ReportDate', но не оба ..... –

ответ

2

попробовать это

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 
+0

Спасибо! Это сработало. – MilesToGoBeforeISleep

1

использование Нанести ..

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