根据变量将数据插入到列中

时间:2015-03-31 18:56:02

标签: sql sql-server-2008 sql-server-2012

这听起来有点棘手。我有一张表,从2012年1月到2015年3月有列。每个月都有它自己的专栏。

我正在创建一个循环查询,它会计算每位医生过去12个月的总访问次数。所以基本上它做了类似的事情,但更多涉及。

Declare @StartDate as Date = '20110101'
Declare @EndDate  as Date = Dateadd(mm, 12, @Startdate)
Declare @Column as VarChar(15) = DateName(MM, @EndDate) + DateName(YY, @EndDate)

Create Table #Final
(
     DoctorID      Int
     January2012   Int
     February2012  Int
     March2012     Int
     ....
)

Select
DoctorID
Count(InvoiceID) Over (Partition By HospitalID, DoctorID) as CountofVisits
From
Invoice

现在我要做的是根据结束日期将访问次数插入到正确的列中。此查询将循环显示该时间段的每个月。

谢谢,

1 个答案:

答案 0 :(得分:0)

您需要在执行查询之前指定要插入的列,这意味着您已经遗憾地进入了动态SQL领域。动态SQL的工作原理是将变量设置为等于文本字符串,然后对变量使用exec命令。这不是火箭科学,但它可能更多的解释,舒适地适应堆栈溢出的答案。幸运的是,Pinal Dave已经解释过了,并且可能比我能做得更好:

http://blog.sqlauthority.com/2013/03/28/sql-server-executing-dynamic-sql-sql-queries-2012-joes-2-pros-volume-4-query-programming-objects-for-sql-server-2012/

你正在寻找的答案大约是页面的一半,但我建议阅读整篇文章,因为它非常有用。

作为公平警告,动态sql通常会对性能产生影响,当与循环结合使用时,您可能正在寻找能够让DBA关注的东西。