Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较同一个表中的两列并在另一个表中更新的SQL_Sql_Sybase - Fatal编程技术网

比较同一个表中的两列并在另一个表中更新的SQL

比较同一个表中的两列并在另一个表中更新的SQL,sql,sybase,Sql,Sybase,表: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 表2: Col New Updated Data 100 500 700 900 1000 No Values 2000 No Values 从

表: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     
表2:

Col New Updated Data
100 500
700 900
1000    No Values
2000    No Values

从表1中,我想逐行比较col1和col2,或者通过简单的查询找到像100 assinged到200,但像200 assinged 300这样的值。。最后400人被分成500人。我想先把500分重新计算,然后再分成100分。这是一种之字形的比较。如何使用SQL。

据我所知,您有类似于链表的东西,对于每个链表,您都希望获得最小和最大id

如果您使用的是SQL Server,那么应该可以立即使用,否则我认为您可以将相同的方法应用于其他rdbms

表声明和测试值插入:

CREATE TABLE #t 
(
    Col1 int,
    Col2 int 
)
插入t值(100200)、(200300)、(300400)、(400500)、(700900)

实际代码是:

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

我希望这将有助于

您正在使用什么?您正在使用哪种SQL产品?MySQL、Oracle、SQL Server?这将对如何解决这一问题产生重大影响。请阅读: