私は継承したストアドプロシージャを作成していますが、いくつかのクロス適用クエリがあります(以下のクエリを参照)。私は経験豊富なSQL開発者を抱えていますが、クロス・アプリケーションにはあまり適していません。SQL Cross Apply - この例でなぜ使用されているのか明確ではありません
私の質問は、これらの2つのクエリのクロス適用は、単に関数呼び出しやロジックを作成して列を作成することです。選択とクロス適用を完全に削除するだけです。どうして私がそれに感謝するのかについて何らかの説明をすることができれば。
クロス・アプライが使用されているのを見ると、クロス・アプリケーションの中には、十字適用外の表に本質的に結合するものがあります。例えば、このようなものは、十字架の内側にあり、FROMテーブルをクロス・アプリケーションのテーブルに「結合」するために適用されます:soh.SalesOrderID(クロス・テーブルの外側のテーブル)= sod.SalesOrderID(クロス内のテーブル)
私はいません下の2つのクエリまたはその理由のようなものを見てください。
SELECT
LeadInventory.LoanNumber,
'Client Age',
PEMWeightByClientAge.PEMWeight,
LeadInventory.ClientAge,
PEMWeightByClientAge.PEMWeight,
#LoanPEMModelHybrid.PEMModel
FROM LeadInventory
INNER JOIN #LoanPEMModelHybrid ON dbo.LeadInventory.LoanNumber = #LoanPEMModelHybrid.LoanNumber
CROSS APPLY
(
SELECT PEMWeight =
CASE
WHEN LeadInventory.ClientAge<=70 AND LeadInventory.ClientAge>=62 Then @PEMWeightAge62To70
WHEN LeadInventory.ClientAge<80 AND LeadInventory.ClientAge>70 THEN @PEMWeightAge71To80
WHEN LeadInventory.ClientAge>=80 THEN @PEMWeightAge80Plus
ELSE 0
END
) AS PEMWeightByClientAge
WHERE #LoanPEMModelHybrid.PEMModel = 'Application'
AND LeadInventory.ClientAge>0
SELECT DISTINCT
IDENTITY(INT, 1,1) AS ID,
LoanNumber,
Calculation.Prob AS TotalPEMScoreForLoan,
PEMModelCode
INTO #PEMScoreHybridFinal
FROM #PEMScoreHybrid
CROSS APPLY
(
SELECT Prob =
CASE PEMModelCode
WHEN 'Initial QQ' THEN CAST (EXP(@INITIALQQBASE+ TotalPEMScoreForLoan)/(EXP(@INITIALQQBASE+TotalPEMScoreForLoan)+1)*100 AS Decimal(9,2))
WHEN 'APPLICATION' THEN CAST (EXP(@APPLICATIONBASE+ TotalPEMScoreForLoan)/(EXP(@APPLICATIONBASE+TotalPEMScoreForLoan)+1)*100 AS Decimal(9,2))
END
) Calculation
ありがとうございます。
私の意見では、あなたは完全に正しいです。それはちょっと厄介な構文です。私がスクリプトを書いていたら、それを関数にするか、selectステートメントにインクルードします。しかし、すでにリファクタリングしていても、リファクタリングするのは難しいでしょうか? –