SQL新手在這裏。我一直在研究如何使用另一個表中的數據將計算列添加到視圖中,但未能獲得我想要的結果。SQL Server 2012將計算列添加到具有不同數據類型的另一個表的視圖
考慮這樣的觀點:
CREATE VIEW [Portfolio].[MTDPNL]
AS
SELECT IssuerLS, Issuer, Ticker, SUM (GLPeriod) As [PNL], ReportDate
FROM Portfolio.DailyPortfolioIssuerLS
WHERE ReportDate
BETWEEN
(SELECT CONVERT(CHAR(10),DATEADD(dd,-(DAY(GetDate())-1),GetDate()), 120))
AND
(SELECT CONVERT(CHAR(10),(getdate()),120))
GROUP BY Issuer, Ticker, IssuerLS, ReportDate
現在考慮它返回一個整數值SELECT語句:
SELECT Nav AS [NavBOM]
FROM Portfolio.DailyStats ds
WHERE Date = (SELECT CONVERT(CHAR(10),DATEADD(dd,-(DAY(GetDate())-1),GetDate()), 120))
我想將列添加到我的觀點是PNL/NavBom。換句話說,對於我的觀點中的每一行,我想添加一個列,它將PNL列中的數字作爲分子,並將其除以NavBOM數字(因此分母對於每一行都是相同的)
我一直在測試與下面的代碼:
SELECT IssuerLS, Issuer, Ticker, SUM (GLPeriod) As [PNL], ReportDate,
CAST(SUM (GLPeriod)/(SELECT Nav AS NavBOM
FROM Portfolio.DailyStats ds
WHERE Date = (SELECT CONVERT(CHAR(10),DATEADD(dd,-(DAY(GetDate())-1),GetDate()), 120)))
AS Decimal (7,4)) AS[%ofNAV]
FROM Portfolio.DailyPortfolioIssuerLS
WHERE ReportDate BETWEEN
(SELECT CONVERT(CHAR(10),DATEADD(dd,-(DAY(GetDate())-1),GetDate()),120))
AND
(SELECT CONVERT(CHAR(10),(getdate()),120))
GROUP BY Issuer, Ticker, IssuerLS, ReportDate
我不知道問題出在哪裏,但我發現在[%ofNAV]列,每列一個的0.0000值。 NavBOM和PNL都是整數數據類型..並且由於NavBOM將會比PNL大得多,所以我需要將它轉換爲十進制。
另外,我創建的原始視圖需要將近4秒才能執行。可能是因爲我在WHERE子句中有查詢。任何建議,以改善這將不勝感激。
謝謝!
從下往上去......你能雖然它不會是性能殺手從where子句中刪除選擇。我假設ReportDate不是Date或DateTime類型?你的兩張桌子之間又有什麼關係? 'DailyStats'和'DailyPortfolioIssuerLS'? – scsimon
ReportDate是Date(yyyy-mm-dd)類型。 'DailyStats'和'DailyPortfolioLS'並沒有真正的聯繫,只是它們都有投資組合的表現編號,但'DailyPortfolioLS'的信息更細化。 – MilesToGoBeforeISleep