2

以下のスクリプトがあります。

    ;;WITH CTE AS
    (
        SELECT 
                RANK() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC,MAX(SecurityName)) AS [Rank]
            ,   ReportingDate
            ,   PortfolioID
            ,   PortfolioNme
            ,   MAX(SecurityName)                               AS SecurityName
            ,   CAST(SUM(Percentage) AS DECIMAL(22,1))          AS [Weight]
            ,   SEDOL
            ,   MAX(ISIN)                                       AS ISIN
        FROM @Worktable as WT

        WHERE WT.IssueType2 <> '010' AND WT.IssueType2 <> '055' AND WT.IssueType1 <> '110' -- To remove CASH and FX and Collateral

        GROUP BY    WT.ReportingDate
                ,   WT.PortfolioID
                ,   WT.PortfolioNme
                ,   WT.SEDOL
    )

    SELECT 
          CONVERT(VARCHAR, ReportingDate, 103)  AS ReportingDate
        , PortfolioID                           AS FundCode
        , PortfolioNme                          AS FundName
        , SecurityName                          AS InstrumentName
        , [Rank]
        , [Weight]                              AS Percentage
        , SEDOL
        , ISIN
    FROM CTE

    WHERE [Rank] <= 10

    ORDER BY ReportingDate, PortfolioID, [Rank], [Weight] DESC

同じ SEDOL をグループ化したいので、SEDOL でグループ化していますが、これにより NULLS がグループ化されています。SEDOL の周りに MAX を追加してスクリプトを変更してみました。

CASE 
    WHEN SEDOL IS NULL THEN SecurityName 
    ELSE SEDOL
END

私のGROUP BYでは成功しませんでした。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

AND WT.SEDOL is not nullCTEWHERE句に単純に追加したいようです

于 2013-02-14T16:06:30.440 に答える
0

どうですか:

;;WITH CTE AS
    (
        SELECT 
                RANK() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC,MAX(SecurityName)) AS [Rank]
            ,   ReportingDate
            ,   PortfolioID
            ,   PortfolioNme
            ,   MAX(SecurityName)                               AS SecurityName
            ,   CAST(SUM(Percentage) AS DECIMAL(22,1))          AS [Weight]
            ,   ISNULL(SEDOL, SecurityName) AS SEDOL
            ,   MAX(ISIN)                                       AS ISIN
        FROM @Worktable as WT

        WHERE WT.IssueType2 <> '010' AND WT.IssueType2 <> '055' AND WT.IssueType1 <> '110' -- To remove CASH and FX and Collateral

        GROUP BY    WT.ReportingDate
                ,   WT.PortfolioID
                ,   WT.PortfolioNme
                ,   ISNULL(WT.SEDOL, SecurityName)
    )

    SELECT 
          CONVERT(VARCHAR, ReportingDate, 103)  AS ReportingDate
        , PortfolioID                           AS FundCode
        , PortfolioNme                          AS FundName
        , SecurityName                          AS InstrumentName
        , [Rank]
        , [Weight]                              AS Percentage
        , SEDOL
        , ISIN
    FROM CTE

    WHERE [Rank] <= 10

    ORDER BY ReportingDate, PortfolioID, [Rank], [Weight] DESC
于 2013-02-14T13:45:33.893 に答える