【发布时间】:2022-12-05 15:45:43
【问题描述】:
嗨,我不确定如何解决我的问题,我会尽我所能解释它。
我有: 表 A -> 包含 [ITEM ID] + 关于我的项目的其他信息 表 B -> 包含 [ITEM ID] [OPERATION] [SUBOPERATION] [VALUE] [FLAG IS LAST]
我想创建一个将返回的视图:
A.[ITEM ID],[OPERATION 1名称](包含对应B.[VALUE]),[Name of OPERATION 2](包含对应B.[VALUE])
我的问题是我只想返回 B.[VALUE],它在 B.[FLAG IS LAST] 中包含标志“LAST”
表 B 可以针对相同的 [ITEM ID] [OPERATION] [SUBOPERATION] 有多行,因为我们可以多次测量同一个项目。我只想返回最后一个 [VALUE],所以我的视图应该具有 [ITEM ID] [OPERATION] [SUBOPERATION] 的独特组合。
希望我的解释很清楚。
我用一个函数尝试了这个,它似乎可以工作,但这是最好的选择吗?
这是我创建的函数:
CREATE FUNCTION [dbo].[GetLastResult](@OPE nvarchar(100), @SUBOPE nvarchar(100), @ITEMID nvarchar(100))
RETURNS nvarchar(100)
AS
BEGIN
RETURN(
SELECT [VALUE]
FROM [dbo].[TABLE_B]
WHERE [OPERATION] = @OPE AND [SUBOPERATION] = @SUBOPE AND [ITEM ID] = @ITEMID AND [FLAG IS LAST] = 'LAST')
END
然后在我的视图中,我调用函数如下:
SELECT
A.[ITEM ID],
dbo.GetLastResult('0040', '0040', [ITEM ID]) AS Name_of_OPERATION_1,
dbo.GetLastResult('0090', '0090', [ITEM ID]) AS Name_of_OPERATION_2
FROM TABLE_A
LEFT JOIN TABLE_B
ON A.[ITEM ID] = B.[ITEM ID]
这里 '0040', '0040',[ITEM ID] 和 '0090', '0090',[ITEM ID] 是作为参数传递的操作和子操作。
我假设这种方法不是很有效,因为对于每一行它都不必对表 B 进行研究以获得最后的结果,尽管记录量很少超过 10k。
你会如何处理这个问题? 我没有选择数据必须按照我描述的方式表示:意味着每个 [OPERATION] [SUB OPERATION] 一个字段。
任何帮助,评论表示赞赏!
【问题讨论】:
-
表的结构和样本数据在这里会有所帮助,在您没有使用连接表 B 的视图中。 “0040”和“0090”来自哪里?总是一样?用户输入?