Sql server 返回具有负等效项的行

Sql server 返回具有负等效项的行,sql-server,Sql Server,我有一个包含多个列的非规范化表。我想返回所有具有相同值的正数和负数的列 例如: ID | Value ------------- 1 | 10 1 | -10 3 | 15 3 | 15 4 | -1 5 | 4 电流输出: ID | Values ------------- 1 | 10 1 | -10 3 | 15 3 | 15 期望输出: ID | Value ------------- 1 | 10 1 | -10 我制作了一个w

我有一个包含多个列的非规范化表。我想返回所有具有相同值的正数和负数的列

例如:

ID  |  Value
-------------
1   |  10
1   | -10
3   |  15
3   |  15
4   | -1
5   |  4
电流输出:

ID | Values
-------------
1  |  10
1  | -10
3  |  15
3  |  15
期望输出:

ID | Value
-------------
1 |  10
1 | -10
我制作了一个windows函数,如下所示,它将选择相同的绝对值,但这包括有正数的对

select Count(*) Over (Partition By DVN, [Tran Date], [Reference Number],Description,Vendor, Abs([Maintenance Expense])) As cnt , * 
    From WorkTemp.dbo.Customer2700Combine
    Where [Maintenance Expense] Is Not Null
Order By 1 Desc,DVN, [Tran Date], [Reference Number],Description,Vendor, Abs([NonRental Total])

不确定您的需求是否由[ID]确定,请查看您的示例、描述和所需输出,我将这样做:

DROP TABLE IF EXISTS #sopg;

SELECT [ID],
       [VALUE]
INTO #sopg
FROM
(
    SELECT 1 AS ID,
           10 AS VALUE
    UNION
    SELECT 1 AS ID,
           -10 AS VALUE
    UNION
    SELECT 3 AS ID,
           15 AS VALUE
    UNION
    SELECT 3 AS ID,
           15 AS VALUE
    UNION
    SELECT 4 AS ID,
           -1 AS VALUE
    UNION
    SELECT 5 AS ID,
           4 AS VALUE
) x;

-- Assuming that one ID can only have maximum 2 rows (like your example above) and want this by ID

SELECT s.[ID],
       s.[VALUE]
FROM #sopg s
    INNER JOIN
        (
        SELECT ID,
               SUM(VALUE) SumZero
        FROM #sopg
        GROUP BY ID
        HAVING SUM(VALUE) = 0
    ) SumZero ON SumZero.ID = s.ID

  -- Another way, assuming that ID can have more than 2 rows and different values

DROP TABLE IF EXISTS #sopg2;

SELECT [ID],
       [VALUE]
INTO #sopg2
FROM
(
    SELECT 1 AS ID,
           10 AS VALUE
    UNION
    SELECT 1 AS ID,
           -10 AS VALUE
    UNION
        SELECT 1 AS ID,
           -9 AS VALUE
    UNION
    SELECT 3 AS ID,
           15 AS VALUE
    UNION
    SELECT 3 AS ID,
           15 AS VALUE
    UNION
    SELECT 4 AS ID,
           -1 AS VALUE
    UNION
    SELECT 5 AS ID,
           4 AS VALUE
) x

SELECT a.[ID],
       a.[VALUE]
FROM #sopg2 a
INNER JOIN #sopg b ON b.ID = a.ID AND a.VALUE = -b.VALUE

大家好,欢迎来到SO。是一个很好的起点。在上面的示例中,您是否关心这些值是同一ID的一部分?或任何值,无论ID如何?非常感谢!第二个解决方案非常有效,匹配反向值非常聪明,我不知道你能做到!是的,你基本上可以在“=”部分做每一个转换,顺便说一句,如果你复制并粘贴我在我的答案中的测试数据,作为你问题中输入测试数据的一部分,人们可能会对你的答案进行投票,因为这样更容易理解和复制。干杯