0

クロス適用を使用する方が効率的だと思うクエリがあります。構文を join から cross apply に変更しましたが、一般的な構文エラーが発生します。

メッセージ 170、レベル 15、状態 1、行 14 行 14: 「適用」付近の構文が正しくありません。メッセージ 156、レベル 15、状態 1、行 21 キーワード「as」付近の構文が正しくありません。

クロス適用を使用するのはこれが初めてで、構文エラーは見られません (少なくとも、私が見つけた例と比較すると)。コードは次のとおりです。

Select v.PC_ID
, v.PC_Name
, v.LOB
, v.REG
, v.DST
, v.PC
, d.Effective_Date as DateOfLastInc
, p.TotalPriceIncPct
, p.last_update_by
, d.PlanEffective_Date
, p2.PlanTotalPriceIncPct
--INTO #temp1
from v_PC_Profile v
cross apply (
    Select pc_id
, Effective_Date=max(Effective_Date)
, PlanEffective_Date=max(PlanEffective_Date) 
from dbo.Price_Inc_PC_Details
where pc_id = v.pc_id
group by pc_id
) as d --on d.PC_ID=v.PC_ID
left join dbo.Calendar c on c.FULL_DATE=d.Effective_Date 
left join dbo.Price_Inc_PC_Details p on d.PC_ID=p.PC_ID and d.Effective_Date=p.Effective_Date
left join dbo.Price_Inc_PC_Details p2 on d.PC_ID=p2.PC_ID and         d.PlanEffective_Date=p2.PlanEffective_Date --added by ajl 1/15/2013

WHERE segment NOT IN ('Closed', 'Overhead')
and segment not like '%closed%'
and Close_Date is NULL

group by v.PC_ID
, v.PC_Name
, v.PC
, d.Effective_Date
, p.TotalPriceIncPct
, d.PlanEffective_Date
, p2.PlanTotalPriceIncPct
, v.REG
, v.DST
, v.LOB
, p.last_update_by
, p.PlanEffective_Date
, p.PlanTotalPriceIncPct
order by v.PC_ID

どんな助けでも大歓迎です!

SD

4

3 に答える 3

8

以前は、互換性レベルが 80 (別名 SQL Server 2000) のデータベースの SQL Server の新しいバージョンで、UDF に対してこのエラーが発生していました。

SQL Server 2012 では構文に問題がなく、問題なく解析できます。SQL Server 2008 R2 で互換性レベル 80 のデータベースを作成しましたが、問題なく解析されます。

MSDN の「APPLY の使用」を参照してください。

APPLY を使用するには、データベースの互換性レベルが 90 以上である必要があります。

于 2014-01-30T15:35:37.247 に答える
1

それは SQL Server 2000 上にあることが判明しました。2005 年より古いものがあるとは知りませんでした。

于 2014-01-31T20:20:38.923 に答える
0

クロス適用演算子の後のサブクエリでは、「group by」と「where」の順序を交換する必要があるようです。

(
Select pc_id
, Effective_Date=max(Effective_Date)
, PlanEffective_Date=max(PlanEffective_Date) 
from dbo.Price_Inc_PC_Details
group by pc_id
having pc_id = v.pc_id
) as d

試してみて、達成したい結果が変わらないことを考慮して、問題が解決するかどうかを確認してください。

さらに、クエリの最後にある group by は、「DISTINCT」の目的を果たしているようです。

于 2014-01-30T15:50:51.710 に答える