0

これに対する解決策を数週間探していましたが、空白になりました。

次のようなデータの表があります。

client_ref  supplier_key  client_amount
1111        GBP           10
1111        GBP           -10
1111        EUR           50
2222        CHF           -22.5
2222        CHF           -20
3333        EUR           -27
3333        EUR           -52
3333        EUR            79

client_ref と supply_key が一致し、client_mount の合計がゼロに等しいすべてのアイテムを抽出する必要があります。出力は次のようになります。

client_ref  supplier_key  client_amount
1111        GBP           10
1111        GBP           -10
3333        EUR           -27
3333        EUR           -52
3333        EUR            79

合計を返す次のように書きましたが、全体的な結果だけでなく、合計を構成する行を表示するようにこれを変更するために提供できる助けが必要です.

SELECT tbis.client_ref ,tbis.supplier_key ,sum(tbis.client_amount) 
FROM [XXXX].[dbo].[transaction] tbis 
WHERE tbis.tbis.client_amount !=0 
GROUP BY tbis.client_ref, tbis.supplier_key 
HAVING sum(tbis.client_amount) =0 
ORDER BY sum(tbis.client_amount)

これが理にかなっていて、私の最初の投稿がOKであることを願っています. 私の投稿に自由に批評してください。

4

6 に答える 6

1

代わりにこれを試してください:

SELECT t1.*
FROM transactions AS t1
INNER JOIN
(
  SELECT
    tbis.client_ref ,
    tbis.supplier_key,
    sum(tbis.client_amount) AS total
  FROM transactions tbis 
  WHERE tbis.client_amount !=0 
  GROUP BY tbis.client_ref, tbis.supplier_key 
  HAVING sum(tbis.client_amount) =0 
) AS t2  ON t1.client_ref = t2.client_ref
        AND t1.supplier_key = t2.supplier_key
ORDER BY t2.total;
于 2013-09-30T11:03:58.463 に答える
0
SELECT t.* FROM Table1 AS t INNER JOIN
(SELECT [client_ref], [supplier_key], SUM([client_amount]) as Total
FROM Table1 GROUP BY [client_ref], [supplier_key]) AS sumTable
ON t.[client_ref] = sumTable.[client_ref] AND
t.[supplier_key] = sumTable.[supplier_key]
WHERE Total = 0;

サンプルフィドル

于 2013-09-30T11:12:27.737 に答える
0

可能なアプローチの 1 つは、SUM() ウィンドウ関数を使用することです。

SELECT * 
FROM
( SELECT tbis.client_ref ,tbis.supplier_key,tbis.client_amount,
  SUM(tbis.client_amount) OVER (
    PARTITION BY tbis.client_ref, tbis.supplier_key) AS total_client_amount
  FROM [XXXX].[dbo].[transaction] tbis 
  WHERE tbis.client_amount !=0 
)
WHERE total_client_amount = 0

SQL フィドル

于 2013-09-30T11:13:49.520 に答える
0
SELECT 
    * 
FROM 
    tbis
INNER JOIN
(
    SELECT
        client_ref, supplier_key
    FROM
        tbis
    GROUP by client_ref, supplier_key
    HAVING sum(client_amount) = 0
) match
ON match.client_ref = tbis.client_ref 
AND match.supplier_key = tbis.supplier_key

http://sqlfiddle.com/#!3/a3447/8/0のデモ

于 2013-09-30T11:05:56.097 に答える
0
SELECT client_ref ,supplier_key ,sum(client_amount) 
FROM   transaction
WHERE  client_amount <> 0 
GROUP BY client_ref, supplier_key 
HAVING sum(client_amount) = 0 
于 2013-09-30T11:01:20.860 に答える
-1

必要なデータの新しいクエリを作成し、合計を生成するクエリに内部結合で結合して、必要な行に制限します。

于 2013-09-30T11:01:11.660 に答える