Sun*_*hew 3 sql t-sql sql-server
我有一个 select 语句,它从具有大量联接的查询中获取一次迭代的一行中的 4 个列值。必须将其中一个列值作为输入提供给另一个 select 语句以检查 where 条件。此 select 语句为第一个 select 语句的每次迭代的输入返回三行。我需要从第二个 select 语句的三行中获取所有列值以及第一个 select 语句的所有列值。
SELECT val1, val2, val3, val4 from ....
SELECT val5, val6 from anotherTable where someColumn = val1
Run Code Online (Sandbox Code Playgroud)
所需结果:
val1, val2, val3, val4, val51, val61, val52, val62, val53, val63
Run Code Online (Sandbox Code Playgroud)
我正在使用两个连接和两个阅读器来实现这一点,但它减慢了我的速度。如果我可以在单个存储过程中完成此操作,我希望如此。
你可以做这样的事情
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
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示