1

クエリを作成しましたが、結果を次のようにしたいと思います。

Reporting Date    Fund    AssetClass    %
31/10/2012        1       Equity        10
31/10/2012        1       Bond          40
31/10/2012        1       Cash          40
31/10/2012        1       Balanced      10
31/10/2012        1       Other         0

上記の問題は、%が0であり、データがないため明らかに表示されないことです。しかし、私はそれを見せたいです。

したがって、最善の解決策は、すべてのアセットクラスを含む一時テーブルを作成し、ワークテーブルからそのテーブルにRIGHT OUTER JOINして、データがない行にデータを入力することだと思いました。コードは次のとおりです。

SELECT 
    ReportingDate
,   PortfolioID
,   AC.AssetClass
,   ROW_NUMBER() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC) AS [Rank]
,   CAST(SUM(Percentage) AS DECIMAL(22,1))  AS [Weight]

FROM @Worktable as WT

RIGHT OUTER JOIN @AssetClass AS AC
    ON WT.AssetClass = AC.AssetClass

GROUP BY WT.ReportingDate, WT.PortfolioID, AC.AssetClass

ORDER BY [Weight] DESC

私の問題は、これが戻ると次のようになることです。

Reporting Date    Fund    AssetClass    %
31/10/2012        1       Equity        10
31/10/2012        1       Bond          40
31/10/2012        1       Cash          40
31/10/2012        1       Balanced      10
NULL              NULL    Other         NULL

このスクリプトでNULLにデータを入力するにはどうすればよいですか?これを行うための別のより良い方法が潜在的にありますか?

4

1 に答える 1

1
SELECT 
    CASE WHEN Reporting IS NULL THEN MAX(Reporting) OVER (PARTITION BY (SELECT 1)) ELSE Reporting END AS Reporting
,   CASE WHEN Fund IS NULL THEN MAX(Fund) OVER (PARTITION BY (SELECT 1)) ELSE Fund END AS Fund
,   PortfolioID
,   AC.AssetClass
,   ROW_NUMBER() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC) AS [Rank]
,   CAST(SUM(ISNULL(Percentage, 0)) AS DECIMAL(22,1))  AS [Weight]
FROM @Worktable as WT
RIGHT OUTER JOIN @AssetClass AS AC
    ON WT.AssetClass = AC.AssetClass
GROUP BY WT.ReportingDate, WT.PortfolioID, AC.AssetClass
ORDER BY [Weight] DESC
于 2012-11-25T16:53:06.140 に答える