2016-11-18 24 views
4

我想消除排,例如 反對值我在我的桌子下面的行消除行具有相對值

id  value1 value2 value3 
---- ------ ------ ------- 
10  -1  -20  -48.5 
10  1   20  48.5 
10  -1  -30  -26.2 
10  1   30  26.2 
10  1   27  30.5 

什麼,我想獲得是

id  value1 value2 value3 
---- ------ ------ ------- 
10  1   27  30.5 

任何建議將不勝感激。

+2

如果你有兩排像'1,20,48.5',只有一個像'-1,-20,-48.5'? –

回答

0

我返回正數。然後我將所有字段分組,只返回單行字段。您可以在選擇中使用MINMAX。兩者都會返回正確的結果。

DECLARE @Tbl TABLE (id INT, value1 INT, value2 INT, value3 FLOAT) 

INSERT INTO @Tbl   
VALUES 
(10,  -1,  -20,  -48.5), 
(10,  1,   20,  48.5), 
(10,  -1,  -30,  -26.2), 
(10,  1,   30,  26.2), 
(10,  1,   27,  30.5) 


SELECT 
    T.id , 
    MIN(T.value1) , 
    MIN(T.value2), 
    MIN(T.value3) 
FROM 
    @Tbl T 
GROUP BY 
    T.id , 
    ABS(T.value1) , 
    ABS(T.value2), 
    ABS(T.value3) HAVING COUNT(1) = 1 

結果:

id value1 value2 value3 
10 1  27  30.5 

我建議你測試它更大的數據。您可能會遇到性能問題。

0

如何:

DECLARE @T TABLE (
    id INT, 
    value1 INT, 
    value2 INT, 
    value3 DECIMAL(9,2) 
) 

INSERT @T VALUES 
(10, -1, -20, -48.5), 
(10, 1, 20, 48.5), 
(10, 1, -20, -48.5), 
(10, -1, 20, 48.5), 
(10, -1, -30, -26.2), 
(10, 1, 30, 26.2), 
(10, 1, 27, 30.5) 

SELECT A.* FROM @T A 
LEFT JOIN @T B ON 
    B.id = A.id 
    AND B.value1 = -A.value1 
    AND B.value2 = -A.value2 
    AND B.value3 = -A.value3 
WHERE B.id IS NULL