【问题标题】:Calculated field -> lookup latest value from an other table (passing multiple criteria)计算字段 -> 从另一个表中查找最新值(传递多个条件)
【发布时间】: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”来自哪里?总是一样?用户输入?

标签: sql function view


【解决方案1】:

我不确定我是否理解这个问题,

但是根据给出的信息,这应该有相同的结果:

SELECT a.[ITEM ID], operation1.VALUE AS Name_of_OPERATION_1, operation2.VALUE AS Name_of_OPERATION_2
FROM TABLE_A a
LEFT JOIN TABLE_B operation1 on operation1.[OPERATION] = '0040' AND operation1.[SUBOPERATION] = '0040' AND operation1.[ITEM ID] = a.[ITEM ID] AND operation1.[FLAG IS LAST] = 'LAST'
LEFT JOIN TABLE_B operation2 on operation2.[OPERATION] = '0090' AND operation2.[SUBOPERATION] = '0090' AND operation2.[ITEM ID] = a.[ITEM ID] AND operation2.[FLAG IS LAST] = 'LAST'

所以: 从另一个表中查找最新值(传递多个条件)--> 在 ON 中加入多个条件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多