Sql server 重写查询以避免子查询
我需要重写下面的查询,避免子查询。我应该怎么做…下面的查询中有两个子查询Sql server 重写查询以避免子查询,sql-server,Sql Server,我需要重写下面的查询,避免子查询。我应该怎么做…下面的查询中有两个子查询 select cc1.claimid as claimid, cc1.createdate as createdate, cc1.condcode as condition_cd1, cc2.condcode as condition_cd2, cc3.condcode as condition_cd3 from claimcond cc1 (nolock) left outer join cla
select
cc1.claimid as claimid,
cc1.createdate as createdate,
cc1.condcode as condition_cd1,
cc2.condcode as condition_cd2,
cc3.condcode as condition_cd3
from claimcond cc1 (nolock)
left outer join claimcond cc2 (nolock) on
cc1.claimid = cc2.claimid
and cc2.condcode = (select min(condcode) from claimcond cc (nolock) where cc1.claimid = cc.claimid)
and cc1.condcode <> cc2.condcode
left outer join claimcond cc3 (nolock) on
cc1.claimid = cc3.claimid
and cc3.condcode in (select min(condcode) from claimcond cc (nolock) where cc1.claimid = cc.claimid
and ((cc.condcode > cc2.condcode)))
and cc1.condcode <> cc3.condcode
ORDER BY cc1.claimid, cc1.condcode DESC
存在:
select
cc1.claimid as claimid,
cc1.createdate as createdate,
cc1.condcode as condition_cd1,
cc2.condcode as condition_cd2,
cc3.condcode as condition_cd3
from claimcond cc1 (nolock)
left outer join claimcond cc2 (nolock) on
cc1.claimid = cc2.claimid
and cc1.condcode <> cc2.condcode
left outer join claimcond cc3 (nolock) on
cc1.claimid = cc3.claimid
and ((cc.condcode > cc2.condcode)))
and cc1.condcode <> cc3.condcode
WHERE EXISTS (
SELECT '1'
FROM claimcond cc (nolock)
WHERE cc1.claimid = cc.claimid and -- Maybe OR
cc2.claimID = cc.claimid )
ORDER BY cc1.claimid, cc1.condcode DESC
您应该看到它是如何执行的:
DECLARE @MinCondCode TABLE (
claimid INT, --datatype correct?
MinCode1 VARCHAR(20) NULL, --datatype correct?
MinCode2 VARCHAR(20) NULL --datatype correct?
)
INSERT INTO @MinCondCode (claimid,MinCode1)
select claimid,min(condcode)
from claimcond cc (nolock)
group by claimid
UPDATE MinCondCode
SET MinCode2=(
select min(condcode)
from claimcond cc (nolock)
WHERE cc.condcode > MinCondCode.MinCode1
AND MinCondCode.claimid = cc.claimid
)
select
cc1.claimid as claimid,
cc1.createdate as createdate,
cc1.condcode as condition_cd1,
cc2.condcode as condition_cd2,
cc3.condcode as condition_cd3
from claimcond cc1 (nolock)
INNER JOIN @MinCondCode mn on mn.claimid=cc1.claimid
left outer join claimcond cc2 (nolock) on cc1.claimid = cc2.claimid
and cc2.condcode = mn.MinCode1
and cc1.condcode <> cc2.condcode
left outer join claimcond cc3 (nolock) on cc1.claimid = cc3.claimid
and cc3.condcode = mn.MinCode2
and cc1.condcode <> cc3.condcode
ORDER BY cc1.claimid, cc1.condcode DESC
获取错误消息8120,级别16,状态1,第8行列“claimcond.claimid”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。消息157,级别15,状态1,第12行UPDATE语句的集合列表中可能不会出现聚合。获取错误。。。。Msg 4104,级别16,状态1,第16行无法绑定多部分标识符cc.condcode。它是此行:和cc.condcode>cc2.condcode