gpt4 book ai didi

sql-server - 基于不同外部应用结果的条件外部应用

转载 作者:行者123 更新时间:2023-12-03 23:51:57 25 4
gpt4 key购买 nike

我有一个查询需要从多个表中检索数据。对于其中两个表,数据由 外部应用 检索,因为有必要查询数据的时间范围。

SELECT a.DATA, b1.DATA, c1.DATA
FROM TABLE_A a
OUTER APPLY
(SELECT TOP 1 b.[DATA]
FROM TABLE_B b
WHERE b.TIME_START <= a.TIME_START
) AS b1
OUTER APPLY
(SELECT TOP 1 c.[DATA]
FROM TABLE_C c
WHERE c.TIME_START <= a.TIME_START
AND c.TIME_STOP >= a.TIME_START
) AS c1

我的问题是 TABLE_C 是一个非常大的表,查询这个表需要一些时间,但如果 TABLE_B 的结果是无效的。与 TABLE_C 相比,TABLE_B 相当小。

例如,这是一个有效的查询结果:

   [a.DATA] [b.DATA] [c.DATA]
1 VALUE_A VALUE_2 NULL
2 VALUE_B NULL VALUE_3

有没有一种方法可以使 TABLE_C 的外层应用到每一行的 TABLE_B 的结果为条件,如上例中仅对第 2 行执行?

最佳答案

像这样:

SELECT  a.DATA ,
b1.DATA ,
c1.DATA
FROM TABLE_A a
OUTER APPLY ( SELECT TOP 1
b.[DATA]
FROM TABLE_B b
WHERE b.TIME_START <= a.TIME_START
) AS b1
OUTER APPLY ( SELECT CASE WHEN b1.[DATA] IS NULL
THEN ( SELECT TOP 1
c.[DATA]
FROM TABLE_C c
WHERE c.TIME_START <= a.TIME_START
AND c.TIME_STOP >= a.TIME_START
)
ELSE NULL
END AS DATA
) AS c1

或者:

   SELECT  a.DATA ,
b1.DATA ,
c1.DATA
FROM TABLE_A a
OUTER APPLY ( SELECT TOP 1
b.[DATA]
FROM TABLE_B b
WHERE b.TIME_START <= a.TIME_START
) AS b1
OUTER APPLY ( SELECT TOP 1
c.[DATA]
FROM TABLE_C c
WHERE c.TIME_START <= a.TIME_START
AND c.TIME_STOP >= a.TIME_START AND b1.[DATA] IS NULL
) AS c1

关于sql-server - 基于不同外部应用结果的条件外部应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com