2012-11-06 37 views
2

我有一個包含事務列表(發票和信用)的表,我需要獲取發票和信用不匹配的所有行的列表。消除SQL結果集中的匹配值

user  product value 
bill  ThingA  200 
jim  ThingA -200 
sue  ThingB  100 
liz  ThingC  50 

我只希望看到第三和第四行,因爲其他的值相匹配了。

我能做到這一點,如果我選擇的產品,和(數值) ...有 組由產品 總和(值)<> 0

效果很好,但我想返回用戶名以及。

只要我將用戶添加到select中,我也需要將它分組,這會使用戶和AND產品的金額不匹配而導致混亂。

任何想法?我使用MS SQL 2000 ...

乾杯

回答

1

你可以這樣做:

SELECT tab2.user, product, sum_val 
    FROM 
    (SELECT product, SUM(value) sum_val 
    FROM your_table 
    GROUP BY product HAVING SUM(value) <> 0) tab1 
    INNER JOIN your_table tab2 
    ON tab1.product = tab2.product 
+0

如果該表對兩個不同用戶所生產的某些產品具有兩個正面交易,則這將不起作用。鑑於OP背景,這仍然是一個很好的解決方案! –

+0

我剛剛在我的回答中使用了OP查詢,以便OP可以在他/她的解決方案中使用他/她的原始查詢.... –

0

@LolCoder的解決方案是好的,但由於在這裏你有 「物B」 與上下文「100」這兩個值「蘇」和「利茲」,你可以能夠與我的查詢檢索以下結果集:

| product | value | users | 
+----------------------------+ 
| Thing B | 200 | sue, liz | 

下面是該查詢:

select product 
     ,sum(value) as value 
     ,Stuff((select ',' + convert(varchar(40), SQ.user) 
       from YourTable SQ 
       where Q.product = SQ.product 
       for xml path('') 
      ), 1, 1, '') as users 
    from YourTable Q 
group by Q.product