Saya punya meja yang saya ikuti dengan operator. Saya dapat memiliki 2 kombinasi ID tabel FDEL - 1 atau 0 dan FDVE 1 atau 0, apa yang ingin saya lakukan adalah menghapus jika - item memiliki FDVE, atau item memiliki FDel (dan hitung) tetapi tidak berfungsi (saya bisa melihatnya Semua FDVE, atau semua FDEL) masukkan deskripsi gambar di sini

select
    lpad(purchase_id,10,0) as purchase_id,
   sum(has_label_fdel) as FDEL_count,
    case when  LABELS   like '%FDVE%' then 1 else 0 end as HAS_LABEL_FDVE,
    sum(has_label_fdve) as FDVE_count
 from 
    "SRC_ORACLEIWP"."PURCHASE_ANALYSIS_RULES"
    group by
    lpad(purchase_id,10,0),has_label_fdve
    
having  FDVE_count>0 -- FDEL_count>0  
0
saska 5 April 2021, 15:32

1 menjawab

Jawaban Terbaik

Anda ingin satu baris resut per produk, jadi hanya grup berdasarkan produk. Gunakan SUM untuk menghitung dan MAX untuk agregates ya / tidak.

select
  lpad(purchase_id,10,0) as padded_purchase_id,
  max(has_label_fdve) as has_labels_fdve,
  sum(has_label_fdve) as fdve_count,
  max(has_label_fdel) as has_labels_fdel,
  sum(has_label_fdel) as fdel_count
from src_oracleiwp.purchase_analysis_rules
group by padded_purchase_id
having has_labels_fdve = 1
    or has_labels_fdel = 1
order by padded_purchase_id;

Saya telah mengubah nama alias Anda sedikit, sehingga mereka berbeda dari kolom yang Anda miliki (karena ambiguitas seperti itu kadang-kadang dapat menyebabkan masalah).

Periksa pada labels like '%FDVE%' tidak perlu, karena Anda sudah memiliki flag has_label_fdve, yang selalu 0 atau 1. Tampaknya. Jika bendera dapat nol, gunakan COALESCE pada mereka atau gunakan ekspresi LIKE.

Jika Anda belum memiliki has_label_fdve dan has_label_fdel, gunakan kolom labels sebagai gantinya:

select
  lpad(purchase_id,10,0) as padded_purchase_id,
  max(case when labels like '%FDVE%' then 1 else 0 end) as has_labels_fdve,
  sum(case when labels like '%FDVE%' then 1 else 0 end) as fdve_count,
  max(case when labels like '%FDEL%' then 1 else 0 end) as has_labels_fdel,
  sum(case when labels like '%FDEL%' then 1 else 0 end) as fdel_count
from src_oracleiwp.purchase_analysis_rules
group by padded_purchase_id
having has_labels_fdve = 1
    or has_labels_fdel = 1
order by padded_purchase_id;
1
Thorsten Kettner 5 April 2021, 13:30