【发布时间】:2013-02-14 12:36:19
【问题描述】:
我在下面有一个脚本:
;;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 中但没有成功。
非常感谢任何帮助。
谢谢
【问题讨论】:
-
你可以尝试像 ISNULL(SEDOL,SecurityName) as Sese ... 并将 group by 更改为 group by WT.Sese
-
但我需要在最终选择中返回 SEDOLS,如果它为 null,我需要返回一个 null
标签: sql-server-2008 tsql group-by common-table-expression