1

このクエリを使用すると、

select 
   receipt_num, trx_num, 
   (case when receipt_amount > 5000 then '1' else 'null') as stamp_value,receipt_amount 
from ra_customer_all where receipt_amount > 5000;

次のような出力が得られます。

receipt_num             trx_num           stamp_value     receipt_amount
   23679                sf35fd                 1              5400
   23679                sdf2424                1              5400 
   23679                rer434                 1              5400
  987444                dgd343                 1              98432
    7610                sdf23                  1              6756
    7610                dfg242                 1              6756

しかし、出力を次のようにしたい:

receipt_num        trx_num        stamp_value      receipt_amount
  23679            sf35fd             1                 5400
  23679            sdf2424            null              5400
  23679            rer434             null              5400
 987444            dgd343             1                 98432
   7610            sdf23              1                 6756
   7610            dfg242             null              6756

レシート番号が 5000 を超える場合、スタンプ値は 1 回だけ印刷する必要があります。

(*1 つのレシートに 1 つ以上の trx_num が含まれる場合があります*)

これで私を助けてください。

select 
acra.attribute6 office_code,
acra.attribute5 collection_number,
acra.receipt_number instrument_number,
 acra.receipt_date collection_date,
 acra.amount collected_amount,
ac.customer_name,
rcta.trx_number ,
(case  row_number() over (partition by acra.receipt_number order by rcta.trx_number)  when acra.amount > 5000 then '1'  else 'NULL' end) stamp_value,
from
ar_cash_receipts_all acra,
ar_customers ac,
ra_customer_trx_all rcta,
ar_receivable_applications_all araa
where
acra.pay_from_customer=ac.customer_id and
acra.cash_receipt_id = araa.cash_receipt_id and
araa.applied_customer_trx_id=rcta.customer_trx_id
and acra.amount > 5000

わかりました、パーティションを追加した結合クエリを更新しますが、欠落しているキーワードとしてエラーが発生します.誰かがこれを編集して目的の出力を得ることができますか?

4

3 に答える 3

3

グループの最初の行で stamp_value を 1 にし、後続のすべての行で NULL にしますか? PARTITION BY を使用:

select 
   receipt_num, trx_num, 
   (case row_number() over (partition by receipt_num order by trx_num) 
     when 1 then 1
     else NULL
     end) stamp_value,
   receipt_amount
from ra_customer_all
where receipt_amount > 5000

これにより、最初の行の stamp_value が 1 に設定され (ソートに trx_num を使用)、後続のすべての行が NULL に設定されます。

于 2012-07-06T10:26:25.240 に答える
1

これを試して

 select receipt_num,trx_num, result= 
case when receipt_amount >500 then 1 else null  end,receipt_amount from ra_customer_all

デモ http://sqlfiddle.com/#!3/f29a6/1

http://sqlfiddle.com/#!3/f29a6/2

于 2012-07-06T10:28:22.340 に答える
0

チェックの目的で、selectステートメントにreceipt_amountも含めることから始められますか?receive_amountの期待値が正しくなく、スクリプトが正しく動作している可能性があります。

また、caseステートメントでnullを一重引用符で囲むことはできません。期待どおり、結果セットでnull値の代わりに文字列を取得します。

于 2012-07-06T10:09:26.520 に答える