2012-08-03 69 views
0

我试图做一个自我加入此查询上,并不断收到错误invalid object name x自连接的查询无效的对象名称MSSQL 2008

select row_number() over(order by patientid,admissiondate, claimsfromdate,datediff(dd,admissiondate, claimsfromdate)) as rn 
    ,x.patientid, x.admissiondate, x.claimsfromdate, x.rehabwait 

from 
(
SELECT distinct 
     patientid 
     ,admissiondate 
     ,claimsfromdate 
     ,DATEDIFF(dd, admissiondate, claimsfromdate) as rehabWait, hcpcs 
FROM Claims 
WHERE hcpcs in ('g0151', '97001', '97002', '9339') and claimsfromdate > admissiondate 
) x inner join x as x2 on x.patientid=x2.patientid 

我不能没有将其保存为一个视图做到这一点或重写查询两次(一次在内部,一次在内部连接),我可以吗?

回答

1

使用CTE:

with x as (
    SELECT distinct patientid, admissiondate, claimsfromdate, 
      DATEDIFF(dd, admissiondate, claimsfromdate) as rehabWait, hcpcs 
    FROM Claims 
    WHERE hcpcs in ('g0151', '97001', '97002', '9339') and 
      claimsfromdate > admissiondate 
    ) 
select row_number() over (order by patientid, admissiondate, 
            claimsfromdate, 
            datediff(dd,admissiondate, claimsfromdate) 
         ) as rn, 
     x.patientid, x.admissiondate, x.claimsfromdate, x.rehabwait 
from x inner join 
    x as x2 
    on x.patientid=x2.patientid 

有固定的你原来的问题,我没有看到你所使用X2什么。它不出现在“SELECT”语句中。你所做的只是创建一个给定患者的所有索赔的交叉产品。也许这是合理的。我期望一个群组成为这样的查询的一部分。

+0

这是两部分问题的第一部分。我的全部意图是在patientID和x2.rn> x.rn上加入x2,以减少运算次数。 http://imgur.com/yCN5U其中行号将读取60(62-32)和第3行60(152-92)。 – wootscootinboogie 2012-08-03 16:10:29

+0

这并没有在sql server 2008中执行 – wootscootinboogie 2012-08-03 16:14:11

+0

我会等待这个问题;)从SQL Server 2012或Oracle开始,运行总计要容易得多。 – 2012-08-03 16:15:16

0

您不能以JOIN这样的表格。您需要创建一个视图,您可以参考两次或者可以执行以下操作:

SELECT row_number() over(order by patientid, admissiondate, claimsfromdate, rehabWait) as rn 
    , x.patientid 
    , x.admissiondate 
    , x.claimsfromdate 
    , x.rehabwait 
FROM 
(
    SELECT distinct 
      c1.patientid 
      , c1.admissiondate 
      , c1.claimsfromdate 
      , DATEDIFF(dd, c1.admissiondate, c1.claimsfromdate) as rehabWait 
      , c1.hcpcs 
    FROM Claims c1 
    INNER JOIN Claims c2 
     ON c1.patientid = c2.patientid 
    WHERE c1.hcpcs in ('g0151', '97001', '97002', '9339') and c1.claimsfromdate > c1.admissiondate 
) x