有没有办法编写一个查询,该查询根据行中的值从同一个表中的不同行返回一个值,并让它在同一行返回该值?
我有一个包含SC_CODE
,SC_DESC
,SC_ALT_CODE
和SC_CANX_CODE
列的表:
SC_CODE
值为1
,2
,901
,902
等。SC_DESC
值为Test1
,Test2
,Test3
,Test4
等。SC_ALT_CODE
值为NULL
,3
,4
,NULL
等。SC_CANX_CODE
值为901
,902
,903
,904
等。我的查询需要返回类似的内容:
1, Test1, NULL, 901, Test3
2, Test2, 3, 902, Test4
此处Test3
是SC_DESC
的{{1}}而SC_CODE 901
是Test4
的{{1}}等。
答案 0 :(得分:1)
我认为这应该适合你:
DECLARE @TEST AS TABLE
(
SC_CODE INT
, SC_DESC VARCHAR(255)
, SC_ALT_CODE INT
, SC_CANX_CODE INT
)
INSERT @TEST (SC_CODE, SC_DESC, SC_ALT_CODE, SC_CANX_CODE)
VALUES (1, 'Test1', NULL, 901)
, (2, 'Test2', 3, 902)
, (901, 'Test3', 4, 903)
, (902, 'Test4', NULL, 904)
, (3, 'Test5', NULL, NULL)
SELECT T.SC_CODE
, T.SC_DESC
, T.SC_ALT_CODE
, T.SC_CANX_CODE
, T2.SC_DESC AS CANX_DESC
, T3.SC_DESC AS ALT_DESC
FROM @TEST AS T
JOIN @TEST AS T2
ON T2.SC_CODE = T.SC_CANX_CODE
LEFT JOIN @TEST AS T3
ON T3.SC_CODE = T.SC_ALT_CODE
结果:
+---------+---------+-------------+--------------+-----------+----------+
| SC_CODE | SC_DESC | SC_ALT_CODE | SC_CANX_CODE | CANX_DESC | ALT_DESC |
+---------+---------+-------------+--------------+-----------+----------+
| 1 | Test1 | NULL | 901 | Test3 | NULL |
| 2 | Test2 | 3 | 902 | Test4 | Test5 |
+---------+---------+-------------+--------------+-----------+----------+
修改强>
添加了SC_ALT_CODE的连接,如评论中所述。注意我在示例数据中添加了一行以获得结果。另请注意LEFT JOIN
的使用,并非每个记录都有替代。使用LEFT JOIN
,您不会丢失这些记录。
答案 1 :(得分:0)
它仍然不完全清楚你想要做什么,但我认为你正在寻找偏移量为2的LEAD函数,以产生所需的结果:
CREATE TABLE #tbltmp(
SC_CODE int,
SC_DESC varchar(5),
SC_ALT_CODE int,
SC_CANX_CODE int);
INSERT INTO #tbltmp values
(1,'Test1',NULL,901),
(2,'Test2',3,902),
(901,'Test3',4,903),
(902,'Test4',NULL,904);
SELECT
SC_CODE,
SC_DESC,
SC_ALT_CODE,
SC_CANX_CODE,
LEAD(SC_DESC,2) OVER (ORDER BY SC_DESC) SC_DESC
FROM #tbltmp
DROP TABLE #tbltmp