【问题标题】:Self join on a query invalid object Name MSSQL 2008查询无效对象上的自联接名称 MSSQL 2008
【发布时间】:2012-08-04 00:16:51
【问题描述】:

我正在尝试对此查询进行自联接并不断收到错误 invalid object name x

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

如果不将其保存为视图或将查询重写两次(一次在 from,一次在内部连接),我不能这样做,可以吗?

【问题讨论】:

    标签: sql tsql


    【解决方案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”语句中。您所做的只是为给定患者创建所有索赔的交叉产品。也许这是合理的。我希望 group by 成为此类查询的一部分。

    【讨论】:

    • 这是两部分问题的第一部分。我的整个意图是在 patientID 和 x2.rn > x.rn 上加入 x2 以进行减法运算。 imgur.com/yCN5U 其中行号为 60 (62-32) 和第 3 行 60 (152-92)。那个也有问题,但仍在努力:)
    • 这在 sql server 2008 中没有执行
    • 我会等待这个问题 ;) 从 2012 年开始,在 SQL Server 或 Oracle 中运行总计要容易得多。
    • 是的,我知道。我有一个非常简洁的累积分布函数,效果很好。打算试试看我能为这个做些什么。
    【解决方案2】:

    您不能以这种方式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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多