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 回答