我有一个Web服务,我从中获取数据(不是我的,我无法更改)
数据采用以下格式
<DealMetrics>
<DealId>1</DealId>
<DealName>ABC</DealName>
<FundAbbreviation>ABC</FundAbbreviation>
<NavYear>2012</NavYear>
<NavMonth>January</NavMonth>
<Nav>123</Nav>
.
.
.
</DealMetrics>
我有一个显示此性能数据的矩阵并且工作正常 - 我在该年有一个行组,在该月有一个列组。如果交易只运行了很短的时间,就会出现问题 - 我想显示所有月份而不管我们是否有任何数据 - 例如,如果交易在9月份开始,而我们在12月份我想要列标题显示为1月 - 8月以及Web服务中返回的数据。
有什么想法吗?
此致 安迪
答案 0 :(得分:0)
可能不是最优雅的方式(我是SQL的相对新手!)但我会创建一个表,它实际上是您感兴趣的时期内所有月份的日历(使用递归CTE)然后只是将来自Web服务的查询结果加入到那个?
答案 1 :(得分:0)
假设您的指标最终出现在SQL Server表中,其中包含以下列:
-- Metrics table:
DealId
DealName
FullAbbreviation
NavYear
NavMonth
Nav
创建一个日历表,以保存您可能感兴趣的所有年份和月份。有关如何创建日历表的说明,请查看此帖子,例如:How to create a Calender table for 100 years in Sql
然后,当您拥有日历表时,请在您的指标表的外部联接中使用它,以便从日历表中获取所有年份和月份以及度量标准数据(如果有)。数据集中的查询可能如下所示:
SELECT DealId,
DealName,
FullAbbreviation,
ISNULL(NavYear, Months.Year) AS NavYear,
ISNULL(NavMonth, Months.Month) AS NavMonth,
Nav
FROM
(SELECT DISTINCT Year, Month, MonthNumber FROM Calendar) AS Months
LEFT JOIN Metrics ON Months.Year = Metrics.NavYear AND Months.Month = Metrics.NavMonth
ORDER BY NavYear, NavMonth