2

トランザクション (請求書とクレジット) のリストを含むテーブルがあり、請求書とクレジットが一致しないすべての行のリストを取得する必要があります。

例えば

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

他の値が一致するため、3 番目と 4 番目の行のみを見たいと思います。

製品を選択すると、これを行うことができます。合計(値)...合計(値)<> 0の製品ごとにグループ化

これはうまくいきますが、ユーザー名も返したいと思います。

ユーザーを選択に追加するとすぐに、それによってグループ化する必要がありますが、ユーザーと製品で金額が一致しないため、混乱します。

何か案は ?MS SQL 2000 を使用しています...

乾杯

4

2 に答える 2

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
于 2012-11-06T16:52:46.700 に答える
0

@LolCoder ソリューションは優れていますが、「sue」と「liz」の両方で値が「100」の「Thing B」があるコンテキストを考えると、クエリで次の結果セットを取得できる可能性があります。

| 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
于 2012-11-06T17:59:15.530 に答える