gpt4 book ai didi

sql - 一个存储过程中的两个 SELECT 语句,一个为另一个提供输入,另一个返回多行

转载 作者:行者123 更新时间:2023-12-01 10:52:10 27 4
gpt4 key购买 nike

我有一个 select 语句,它从具有大量连接的查询中的一次迭代中获取一行中的 4 个列值。必须将其中一个列值作为输入提供给另一个 select 语句,以检查 where 条件。此 select 语句为第一个 select 语句的每次迭代的输入返回三行。我需要从第二个 select 语句的三行中获取所有列值以及第一个 select 语句的所有列值。

SELECT val1, val2, val3, val4 from ....

SELECT val5, val6 from anotherTable where someColumn = val1

需要结果:

val1, val2, val3, val4, val51, val61, val52, val62, val53, val63

我正在使用两个连接和两个阅读器来实现这一点,但这让我慢了下来。如果我可以在单个存储过程中完成此操作,我会很高兴。

最佳答案

你可以这样做

WITH first AS 
(
SELECT val1, val2, val3, val4
FROM Table1
WHERE 1 = 1
), second AS
(
SELECT val1,
MIN(CASE WHEN rnum = 1 THEN val5 END) val51,
MIN(CASE WHEN rnum = 1 THEN val6 END) val61,
MIN(CASE WHEN rnum = 2 THEN val5 END) val52,
MIN(CASE WHEN rnum = 2 THEN val6 END) val62,
MIN(CASE WHEN rnum = 3 THEN val5 END) val53,
MIN(CASE WHEN rnum = 3 THEN val6 END) val63
FROM
(
SELECT t2.val1, val5, val6,
ROW_NUMBER() OVER (PARTITION BY t2.val1 ORDER BY (SELECT 1)) rnum
FROM Table2 t2 JOIN first f
ON t2.val1 = f.val1
) a
GROUP BY val1
)
SELECT *
FROM first f JOIN second s
ON f.val1 = s.val1

这是 SQLFiddle 演示

关于sql - 一个存储过程中的两个 SELECT 语句,一个为另一个提供输入,另一个返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769108/

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