2016-08-16 22 views
0

から計算された列を持つビューを作成する私はこのコードを使用して作成したTaxLots呼ば:TSQL:私はテーブルを持つ2つの別個のテーブル

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 

私は、すべての関連データとの両方のテーブルを埋め、私は今Taxlotsテーブルと追加の列呼び出しからすべての列を持っているTaxLotsHistoryというビューを作成したいです最終的な営業日がBusinessDatesテーブルからDateCreatedの前に引っ張られるReportDate

たとえば、の日付が2016-08-15の場合、ReportDate2016-08-12である必要があります。論理的には、

ReportDate = Max(BusinessDate) 
where BusinessDate < DateCreated 

が、BusinessDateDateCreatedを与えられた2つの別々のテーブルに、私は構文を考え出すのトラブルを抱えているされています。私はこの線に沿って何かを持っていたが、それは動作していない:私は現在、

けどI 'AS' キーワードの近くに

不正な構文エラーを取得しています

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 

コードに間違ったことがあるのは確かです。ありがとう。 `ポートフォリオFROM:あなたが最も内側の` SELECT`でテーブルのために** 2つのエイリアスを定義しているよう

+1

が見えます。 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 
関連する問題