SQL减去两个结果集的值

时间:2017-09-29 06:40:58

标签: sql sql-server union subtraction

是否存在类似于UNION的运算符,它允许从另一个查询的结果集中减去一个查询的结果集?

例如:

UNION的结果

  

2 3 2 6 1 2 6 3 7

     

1 3 5 2 7 8 4 3 2

潜在减法运算符的结果

  

1 0 -3 4 -6 -6 2 0 5

1 个答案:

答案 0 :(得分:0)

你的情况要简单得多:只从另一个

中减去一列
CREATE TABLE #A 
(
    col1 INT NOT NULL
    ,col2 INT NOT NULL
);

INSERT INTO #A (col1,col2)
    VALUES 
         (2,1)
        ,(3,3)
        ,(2,5)
        ,(6,2)
        ,(1,7)
        ,(2,8)
        ,(6,4)
        ,(3,3)
        ,(7,2)


SELECT (col1 - col2) AS result
FROM #A;

DROP TABLE #A;    

原始回答

因此,如果我理解正确,你需要减去两个一维矩阵。 Sql Server并不是真正做这种数学运算的最佳工具,但这里是一个如何实现目标的例子。这个想法很简单:引入索引(i,j)并通过它们连接(你可以跳过j,因为矩阵是一维的,这个例子适用于二维数组):

CREATE TABLE #A 
(
    element_value INT NOT NULL
    ,i INT NOT NULL
    ,j INT NOT NULL 
    ,PRIMARY KEY (i, j)
);

CREATE TABLE #B 
(
    element_value INT NOT NULL
    ,i INT NOT NULL
    ,j INT NOT NULL 
    ,PRIMARY KEY (i, j)
);

INSERT INTO #A (element_value,i,j)
    VALUES 
         (2,1,1)
        ,(3,1,2)
        ,(2,1,3)
        ,(6,1,4)
        ,(1,1,5)
        ,(2,1,6)
        ,(6,1,7)
        ,(3,1,8)
        ,(7,1,9)

INSERT INTO #B (element_value,i,j)
    VALUES 
         (1,1,1)
        ,(3,1,2)
        ,(5,1,3)
        ,(2,1,4)
        ,(7,1,5)
        ,(8,1,6)
        ,(4,1,7)
        ,(3,1,8)
        ,(2,1,9)    

SELECT (A.element_value - B.element_value) AS result
FROM #A AS A,#B AS B
WHERE A.i = B.i
    AND A.j = B.j;


DROP TABLE #A;            
DROP TABLE #B;