消除SQL结果集中的匹配值

时间:2012-11-06 16:46:49

标签: tsql sql-server-2000 grouping matching suppress

我有一张包含交易清单(发票和信用额)的表格,我需要获取发票和信用额不匹配的所有行的清单。

例如

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

我只想查看第三和第四行,因为其他行的值匹配。

如果我选择产品,总和(价值),我可以这样做 ... 按产品分组 具有和(值)<> 0

效果很好,但我也希望返回用户名。

只要我将用户添加到选择中,我也需要按照它进行分组,因为用户和产品的金额不匹配,这会混淆。

有什么想法吗?我正在使用MS SQL 2000 ...

干杯

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

@LolCoder解决方案很好,但是如果你有“sue”和“liz”都有“100”值的“Thing B”,你可以用我的查询检索以下结果集: / p>

| 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