2016-03-21 32 views
0

Ürünlerin listesini, ayrıntılarıyla birlikte (birkaç ayrıntıda ürünlere bölünmüş bir ana ürünümüz var) ve fiyat değişikliklerinin geçmişini sakladığımız bir tabloyu bulmak için bir sorgu yaptım. bu ürün.Oracle dinamik bölüme katılın

benim oracle veritabanı üzerinde iyi çalışıyor aşağıdaki sorguyu var:

SELECT ref, size, is_promotion, original_price, histo_npx as "current_price" , histo_apx as "old_price" 
from product 
    left join product_details on product_ref = ref 
    left join (select product_ref, histo_npx, histo_dex, histo_apx, 
        rank() over (partition by price.product_ref order by histo_dex DESC) modif_rank 
       from price 
       where histo_npx is not null 
       and price.product_ref = 'MY_REF' 
       and price.product_size = 'MY_SIZE' 
       order by price.histo_dex, price.product_ref) on product_ref = ref 
where (modif_rank = 1 or modif_rank is null) 
    and ref = 'MY_REF' 
    and size = 'MY_SIZE' 

Ama MY_REF ve MY_SIZE değerlerini zorlamadan dinamik olarak yapmak gerekir. Alt sorgumda ve sorguda nerede kaldıracağım, veritabanımın en eski ürünü için tüm geçmişe sahip olduğumdan elbette ki iyi değil, bu yüzden, global sorgumun and ref = 'MY_REF' and size = 'MY_SIZE''unu kaldırırsam alt sorgumu kısıtlamam gerekiyor.

Herhangi bir fikrin var mı? Eğer dış sorguda
yılında ref = 'MY_REF' and size = 'MY_SIZE' filtreleri Böyle sorgu kullanabilir nerede görünüm veya alt sorgu içine sorgu koymak ve dinamik eklemek istiyorsanız

cevap

1

:

SELECT ref, size, is_promotion, original_price, histo_npx as "current_price" , histo_apx as "old_price" 
from product 
    left join product_details on product_ref = ref 
    left join (select product_ref,product_size, histo_npx, histo_dex, histo_apx, 
        rank() over (partition by price.product_ref, price.product_size order by histo_dex DESC) modif_rank 
       from price 
       where histo_npx is not null) on product_ref = ref and product_size = size 
where (modif_rank = 1 or modif_rank is null) 

Ben

    and price.product_ref = 'MY_REF' 
       and price.product_size = 'MY_SIZE' 
    and ref = 'MY_REF' 
    and size = 'MY_SIZE' 

filtreleri kaldırıldı.
Ayrıca, koşulu birleştirmek için rank() bölümünü ve product_size=size koşuluna price.product_size ekleyin.

+0

Lanet olsun neredeyse iyiydim, bölümdeki alanı unuttum ... iyi iş! –