【问题标题】:SQL Server 2008 : recursive querySQL Server 2008:递归查询
【发布时间】:2015-03-26 11:25:39
【问题描述】:

我有这个问题

Select distinct 
   patient.id as Patient_ID
from 
   patient 
inner join 
   ......
where 
    incident.completionDate Between Convert(smalldatetime, '01/02/2015', 103) and Convert(smalldatetime, '04/03/2015', 103) 

我想让它从开始日期到今天递归运行。

我试过这样:

;WITH CTE AS
(--gets you data from 01/01/2014 till current date
    SELECT  
        patient.id as Patient_ID, 
        Convert(smalldatetime, '01/01/2014', 103) start 
    FROM 
        patient 
    INNER JOIN
        .......
    WHERE 
        incident.completionDate Between Convert(smalldatetime, '01/01/2014', 103) and Convert(smalldatetime, GETDATE(), 103)

    UNION ALL

    SELECT  
        incident.Patient_ID, 
        CONVERT(VARCHAR(25), DATEADD(dd, -(DAY(DATEADD(mm,1,start))-1), DATEADD(mm, 1, start)), 103) start
    FROM 
        cte incident 
    WHERE 
        incident.Patient_ID Between CONVERT(smalldatetime, DATEADD(dd, -(DAY(DATEADD(mm, 1, start)) - 1), DATEADD(mm, 1, start)), 103) and Convert(smalldatetime, GETDATE(), 103)
    and CONVERT(smalldatetime,DATEADD(dd,-(DAY(DATEADD(mm,1,start))-1),DATEADD(mm,1,start)),103) <= Convert(smalldatetime, GETDATE(), 103)
)
select * 
from cte

但现在我收到一个错误:

锚点和列中递归部分的类型不匹配 递归查询“CTE”的“开始”。

你能帮我解决这个错误吗?

【问题讨论】:

    标签: sql-server-2008 common-table-expression


    【解决方案1】:

    start 列在锚点部分是 smalldatetime,在递归部分是 varchar(25)。它们必须与错误说明的类型相同。

    锚点和列中递归部分的类型不匹配 递归查询“CTE”的“开始”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2010-12-17
      • 2014-12-19
      • 2012-12-05
      • 1970-01-01
      • 2017-02-02
      • 2014-10-10
      相关资源
      最近更新 更多