Популяция В списке с подзапросом - PullRequest
0 голосов
/ 21 сентября 2018

Преамбула:
Я работаю в среде (Знание), которая позволяет мне делать только SELECT с.$P{something} - это вызов параметра, замененного знанием, при выполнении запроса на движке MSSQL.

. Что мне нужно сделать:
Я должен использовать параметр, чтобы «фильтровать» данные с помощью записикоторые позволяют вынимать все, в настоящее время я могу получить только отфильтрованные данные, я не могу вывести «все»

Мой запрос выглядит так:

select ClusterDRG, t.N as N_cur, u.N as N_pas, t.SubStabilimento
from(  
--- prendo i primi 10 DRG del periodo in corso  confrontando i valori degli stessi DRG del periodo precedente (indipendentemente dal fatto che fossero o meno tra i primi 10)
SELECT count(ProgrSdo) as N
      ,ClusterDRG, TipologiaDRG as tipodrg
     , ROW_NUMBER() OVER(PARTITION BY anno,tipologiaDRG ORDER BY count(progrsdo) desC) as Ordine
     , case when [Anno]=$P{lista_anni} then 'Attuale' 
            when [Anno]=$P{lista_anni}-1 then 'Precedente' 
            else cast([Anno] as varchar (4)) end as Anno
  FROM 
  MY_TABLE

  where left(Mese,2) <=$P{lista_mesi}
  and ANNO = $P{lista_anni} -- l'anno corrente 
  and SubStabilimento = $P{lista_stabilimenti} -- here is my issue
  and codicepresidio=111111

  group by ClusterDRG, TipologiaDRG, anno, SubStabilimento
  ) t
  left join 
  (
  SELECT count(ProgrSdo) as N
      ,ClusterDRG, TipologiaDRG as tipodrg

     , case when [Anno]=$P{lista_anni} then 'Attuale' 
            when [Anno]=$P{lista_anni}-1 then 'Precedente'
    else cast([Anno] as varchar (4)) end as Anno
    , ROW_NUMBER() OVER(PARTITION BY anno,tipologiaDRG ORDER BY count(progrsdo) desC) as Ordine
  FROM  MY_TABLE
  where left(Mese,2) <= $P{lista_mesi} 
  and ANNO = $P{lista_anni}-1 -- l'anno passato 

  and codicepresidio=111111


    and SubStabilimento = $P{lista_stabilimenti} -- here is my issue
    group by ClusterDRG, TipologiaDRG, anno, SubStabilimento
  )u on t.ClusterDRG=u.ClusterDRG and t.TipoDRG=u.TipoDRG and t.SubStabilimento=u.SubStabilimento

мои параметры получили следующие значения:

$P{lista_mesi} := 5
$P{lista_anni} := 2018
$P{lista_stabilimenti} := **here is my issue**

Я хочу использовать $P{lista_stabilimenti} для фильтрации по одному объекту (и при этом теперь это работает) или по всем, если задано определенное значение.

так что если у меня есть $P{lista_stabilimenti} := 'stab1'Я получаю

clust1, 123, 122, stab1
clust2, 789, 456, stab1

и если у меня есть $P{lista_stabilimenti} := 'ALL' (это поведение, которое я пытаюсь сделать), я получаю

clust1, 123, 122, stab1
clust2, 789, 456, stab1
clust1, 321, 221, stab2
clust2, 987, 654, stab2
clust5, 963, 258, stab3

Я попытался заполнить и SubStabilimento = $P{lista_stabilimenti} как

[...]
and SubStabilimento in ( case when exists ( select  SubStabilimento from Knowage_L15_COLLEGATA where SubStabilimento = $P{lista_stabilimenti}) then  $P{lista_stabilimenti}
                             when $P{lista_stabilimenti} like 'TUTTI' then (

                             select  STUFF( 
                                (
                                 SELECT ',' + SubStabilimento 
                                 FROM  MY_TABLE v
                                 where CodicePresidio = '111111'
                                 group by SubStabilimento
                                 FOR XML PATH('')
                                ), 
                            1, 1, '') 

                            )
                            end)
[...]

С этим я получаю строку типа stab1, stab2, stab3, но я не могу передать ее в предложение IN

1 Ответ

0 голосов
/ 21 сентября 2018

Пицца заставила мой мозг снова размолоть, мое решение - как это:

[...]
and SubStabilimento LIKE ( select case when exists ( 
                                                select  SubStabilimento 
                                                from MY_TABLE
                                                where SubStabilimento = $P{lista_stabilimenti}) 
                                              then  $P{lista_stabilimenti}

                                        when $P{lista_stabilimenti} like 'TUTTI'
                                              then '%'  end    as SubStab )
[...]
...