2015-03-31 83 views
0

这听起来有点棘手。我有一张表格,列有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 

现在我想要做的就是根据结束日期将访问计数插入到适当的列中。该查询将循环遍历每个月的时间段。

感谢,

+3

如果你有能力修改你的模式,我会推荐使这个表正常化。为每个月创建一个包含三列的访问的链接表,而不是每个月都有一个列:DoctorID,VisitDate和InvoiceID。这意味着你不必每个月都为你的表添加一个新的数据。它可以让你聚合数据(比如访问次数),而不会像这样跳过箍环。 – DeadZone 2015-03-31 19:05:56

+0

不幸的是,为了实现这个目标,还有很多事情需要完成。我刚刚展示了一个简化的版本 - 实际上,我必须根据这段时间内的收入将每个病人的医疗费用限制在一位医生身上。以及其他信息。 – SASUSMC 2015-03-31 19:39:25

回答

0

你需要执行查询,这意味着你已经黯然进入动态SQL的土地之前,指定要插入的列。动态SQL的工作原理是将一个变量设置为一个文本字符串,然后对该变量使用exec命令。这不是火箭科学,但它可能更适合堆栈溢出答案。幸运的皮纳尔戴夫解释它已经,并且可能大大好于我可以:

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关注的东西。