Преамбула:
Я работаю в среде (Знание), которая позволяет мне делать только 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