我有一个足够复杂的 SPROC,我对其进行了修改以返回更多列(来自其他表)。
我想要的是让这个 SPROC 仍然返回相同数量的行和相同的数据,但也为这些行填充新列(如果数据存在)。我的修改确实填充了新列,但也返回了更多行(基于它找到那些附加表的值)。
这是附加表的示例:
表 FCB:
FCBID | 发票编号 | FCBID代码 | CB代码 | 集 | FCBJrnID |
---|---|---|---|---|---|
ABC1 | 718 | abcC1 | CB1 | 0 | 1234 |
ABC2 | 718 | abcC2 | CB1 | 0 | 1234 |
ABC3 | 718 | abcC3 | CB1 | 0 | 1234 |
DEF1 | 718 | abcC4 | CB1 | 0 | 1234 |
防御2 | 718 | ABCC5 | CB1 | 0 | 1234 |
防御3 | 718 | abcC6 | CB1 | 0 | 1234 |
BBB2 | 334 | ABCC7 | CB2 | 1 | 3333 |
AAA5 | 225 | ABCC8 | CB3 | 0 | 4444 |
表发票:
发票编号 | 产品编号 | 曲目编号 |
---|---|---|
334 | P4 | T7 |
718 | P1 | T1 |
718 | P2 | T1 |
225 | P5 | T5 |
225 | P6 | T6 |
718 | P3 | T1 |
718 | P9 | T1 |
718 | P3 | T2 |
718 | P9 | T2 |
718 | P1 | T2 |
718 | P2 | T2 |
表 FCBAP:
FCBID | 产品编号 | 曲目编号 |
---|---|---|
ABC1 | P1 | T1 |
ABC2 | P2 | T1 |
ABC3 | P3 | T1 |
DEF1 | P1 | T2 |
防御2 | P2 | T2 |
防御3 | P3 | T2 |
BBB2 | P4 | T3 |
原始 SPROC(它的主要部分)围绕 InvoiceID 和 ProdID,当我执行原始 SPROC 时,它只返回了 2 行(正确的行为)。即按 InvoiceID 搜索 = 718
发票编号 | 产品编号 |
---|---|
718 | P1 |
718 | P2 |
718 | P3 |
718 | P9 |
我在这个 SPROC 中添加了以下部分:
在主查询中添加了列:
[FCBI].[FCBID],
[FCBI].[FCBIDCode],
[FCBI].[CBCode],
我添加了另一个外部应用部分,以从其他表中获取数据:
OUTER APPLY
(
SELECT
[FCB].[FCBID],
[FCB].[FCBIDCode],
[LTC].[FieldText] AS [CBCode]
FROM [dbo].[FCB] AS [FCB]
INNER JOIN [dbo].[GenericCodes] AS [GRC] ON [GRC].[Guid] = [FCB].[CBCode]
CROSS APPLY [dbo].[GetTranslationTable] (@LanguageCode , [GRC].[DescriptionID]) AS [LTC]
WHERE
[FCB].[InvoiceID] = [MT].[InvoiceID]
AND FCB.IsSet = 0
AND FCB.FCBJrnID = MT.FCBJrnID
) AS [FCBI];
在这种情况下我期望返回的内容:
发票编号 | 产品编号 | FCBID | FCBID代码 | CB代码 |
---|---|---|---|---|
718 | P1 | ABC1 | abcC1 | CB1 |
718 | P2 | ABC2 | abcC2 | CB1 |
718 | P3 | ABC3 | abcC3 | CB1 |
718 | P9 |
但我得到的是:
发票编号 | 产品编号 | FCBID | FCBID代码 | CB代码 |
---|---|---|---|---|
718 | P1 | ABC1 | abcC1 | CB1 |
718 | P2 | ABC2 | abcC2 | CB1 |
718 | P3 | ABC3 | abcC3 | CB1 |
718 | P1 | DEF1 | abcC4 | CB1 |
718 | P2 | 防御2 | ABCC5 | CB1 |
718 | P3 | 防御3 | abcC6 | CB1 |
718 | P9 |