我有一张包含交易清单(发票和信用额)的表格,我需要获取发票和信用额不匹配的所有行的清单。
例如
user product value
bill ThingA 200
jim ThingA -200
sue ThingB 100
liz ThingC 50
我只想查看第三和第四行,因为其他行的值匹配。
如果我选择产品,总和(价值),我可以这样做 ... 按产品分组 具有和(值)<> 0
效果很好,但我也希望返回用户名。
只要我将用户添加到选择中,我也需要按照它进行分组,因为用户和产品的金额不匹配,这会混淆。
有什么想法吗?我正在使用MS SQL 2000 ...
干杯
答案 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