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如何?非常感谢!第二个解决方案非常有效,匹配反向值非常聪明,我不知道你能做到!是的,你基本上可以在“=”部分做每一个转换,顺便说一句,如果你复制并粘贴我在我的答案中的测试数据,作为你问题中输入测试数据的一部分,人们可能会对你的答案进行投票,因为这样更容易理解和复制。干杯