SQL 比较同一 table 中的两列并在另一个 table 中更新
SQL Comparing Two Columns in same table and update in another table
Table:1
Col1 Col2 Updated Dated
100 200 01-01-99
200 300 02-01-99
300 400 03-01-99
400 500 04-01-99
700 900
Table 2:
Col New Updated Data
100 500
700 900
1000 No Values
2000 No Values
来自 table 1 我想逐行比较 col1 和 col2 或简单查询找到值,如 100 assinged 到 200,但 200 assinged 300 等。最后 400 assinged 到 500。我想要 retrive 500 fianlly 然后被分配到 100.its 种之字形比较。 SQL.
怎么做
据我了解,您有类似链接列表的内容,对于每个链接列表,您都希望获得最小和最大 ID。
如果您正在使用 SQL 服务器,这应该可以立即使用,否则我认为您可以将相同的方法应用于其他 rdbms。
Table 声明和测试值插入:
CREATE TABLE #t
(
Col1 int,
Col2 int
)
INSERT INTO #t VALUES (100, 200), (200, 300 ), (300, 400), (400, 500), (700, 900)
实际代码:
SELECT MIN(Col1) AS Col, MAX(Col2) AS New FROM
(
SELECT SUM(SeqIDStart) OVER (ORDER BY Col1 ASC) AS SeqID, *
FROM (
SELECT
CASE WHEN LAG(B.Col1, 0, NULL) OVER (ORDER BY a.Col1 ASC) IS NULL THEN 1 ELSE 0 END AS SeqIDStart,
a.col1 AS Col1, a.Col2 AS Col2, B.Col1 AS adjsCol
FROM
#t a
LEFT JOIN
#t b
ON a.col1 = b.col2
WHERE a.Col1 IS NOT NULL
) a
) b
GROUP BY SeqID
希望对您有所帮助
Table:1
Col1 Col2 Updated Dated
100 200 01-01-99
200 300 02-01-99
300 400 03-01-99
400 500 04-01-99
700 900
Table 2:
Col New Updated Data
100 500
700 900
1000 No Values
2000 No Values
来自 table 1 我想逐行比较 col1 和 col2 或简单查询找到值,如 100 assinged 到 200,但 200 assinged 300 等。最后 400 assinged 到 500。我想要 retrive 500 fianlly 然后被分配到 100.its 种之字形比较。 SQL.
怎么做据我了解,您有类似链接列表的内容,对于每个链接列表,您都希望获得最小和最大 ID。
如果您正在使用 SQL 服务器,这应该可以立即使用,否则我认为您可以将相同的方法应用于其他 rdbms。
Table 声明和测试值插入:
CREATE TABLE #t
(
Col1 int,
Col2 int
)
INSERT INTO #t VALUES (100, 200), (200, 300 ), (300, 400), (400, 500), (700, 900)
实际代码:
SELECT MIN(Col1) AS Col, MAX(Col2) AS New FROM
(
SELECT SUM(SeqIDStart) OVER (ORDER BY Col1 ASC) AS SeqID, *
FROM (
SELECT
CASE WHEN LAG(B.Col1, 0, NULL) OVER (ORDER BY a.Col1 ASC) IS NULL THEN 1 ELSE 0 END AS SeqIDStart,
a.col1 AS Col1, a.Col2 AS Col2, B.Col1 AS adjsCol
FROM
#t a
LEFT JOIN
#t b
ON a.col1 = b.col2
WHERE a.Col1 IS NOT NULL
) a
) b
GROUP BY SeqID
希望对您有所帮助