在SQL Server中创建动态列数

在SQL Server中创建动态列数,sql,sql-server,Sql,Sql Server,我有以下数据,以及我正在处理的其他一些表 id ClinicId MonthsInOperation Budget Revenue 1 1232 12 2000 2 1534 8 3500 3 1767 10 2500 4 1232 13 3000 5 1534 2

我有以下数据,以及我正在处理的其他一些表

id ClinicId   MonthsInOperation Budget Revenue  
1  1232       12                  2000
2  1534       8                   3500
3  1767       10                  2500
4  1232       13                  3000
5  1534       2                   4000
我最终需要生成的是(表结构):

动态列
将包含特定月份的预算信息(例如
表结构+数据
):


我以前没有使用过PIVOT,不确定这是否是我在这里需要的。

直接从SQL Server生成这样的报告是很困难的。PIVOT的问题在于,它只适用于静态列集。如果您希望输出列是动态的,PIVOT(SQL中)在这方面对您没有帮助

我还假设您还有其他一些表,其中包含每个诊所每月的预算信息

老实说,在某种类型的报告解决方案(活动报告、SSR、Crystal)中使用标题/详细信息类型布局进行此操作可能是对其进行蒙皮的最简单方法。或者在一些非SQL中间层(Java、.NET等)中构建它,因为这样您就可以从不同的数据片段(基本的临床信息、范围内的月份、这些月份的数据)将其组合在一起。您可以在原始TSQL中实现这一点,但根据我的经验,可重复性能充其量只是粗略的


可能不是你想要的答案,但希望能给你一些想法。

每月运营和正常日历之间的关系是什么?我看到里面有13个,这显然代表了第二年,第一个月,但在真实的日期里是什么呢?它是可查询的,还是我们必须依赖硬代码?MonthsInOperation基本上是诊所自开业之日起运营的月数。因此,如果诊所于2014年1月15日开业:如果我们将其与今天进行比较,MIO将为6。正如专栏名称所暗示的,但我从你的帖子中得到暗示,你希望将其翻译为真实日期(即2013年12月),所以问题是,如何?@JaazCole我知道诊所的开业日期,因此,我可以以2013年12月的形式计算出日期。人们甚至可以将Excel连接到SQL Server数据源,然后从数据集中运行数据透视表。否则,如果SQL是唯一的方法,则使用所有12个月构建数据透视,而不管是否需要。您还可以动态构建SQL,但是性能会受到影响。@Earlgeliottii我也使用LogiXML作为报告,但它没有任何这样的功能。如果我想继续使用动态SQL,你知道我应该怎么做吗?啊,好的。然后,您将需要在SQL direct中执行此操作。您可以在sql中执行动态sql,它只是有点时髦。下面是stackoverflow中其他地方的一个示例
ClinicInfo(Static Columns) + Selected Month------------->> End of Year(Dynamic Columns) 
ClinicInfo(Static Columns) + Feb 2013-------------------->> December 2013
--------------------------   2000+-------+-------------------+ 4500