Modyfikacja kodu SQL - SELECT - pod raport

0

Mam taki case. W SSRS tworze raport poprzez polecenie select SUBSTRING (SUSER_NAME (), 13,10 wydobywam nazwę użytkowania. Na jej podstawie tworze indywidualny raport dla użytkownika.

select * from dane
WHERE
data in (@data_raportu)

 AND
dane.sales in (
SELECT distinct [sales]
       FROM [test]. [Dbo]. [T2]
where [login_sales] in (@sales_filtr))

Niestety pojawił się problem, w tym raporcie potrzebuje zrobić pod raport dla regionu. Mam następująca tabele:

DANE 

| DATA   | SALES  | PROFIT | EXPRENSE | PROFIABILITY | REGION |
|--------|--------|--------|----------|--------------|--------|
| 201901 | Sales1 | 50     | 50       | 0            | A      |
| 201901 | Sales2 | 100    | 50       | 50           | A      |
| 201901 | Sales3 | 105    | 55       | 50           | B      |
| 201901 | Sales4 | 90     | 80       | 10           | C      |
| 201901 | Sales5 | 190    | 80       | 110          | A      |

Sales5 to użytkownik / właściciel regionu, pozostali (Sales1 i Sales2) to jego pracownicy. Im raport ma się generować tak jak do tej pory. Sales5 będzie miał dodatkową tabele z wynikami obu panów. niestety nie wiem jak zbudować źródło danych aby na podstawie nazwy użytkowania SQL wyświetlił dane tylko dla regionu A.

Myślałem o

select *, 
case when sales = @sales_filtr then (select * from dane where region = 'A')
Else 0 end 
from dane

Ale w CASE WHEN nie mogę stosować podzapytań.
Macie pomysł jak to ugryźć?

0

już znalazłem rozwiązanie, dzięki!

0

Utworzyłem oddzielną tabele

| login        	| SALES  	| REGION 	|
|--------------	|--------	|--------	|
| sales@sales5 	| Sales5 	| A      	|

a potem tylko napisałem

select * from t1
WHERE 
data in (@data_raportu)
 AND 
t1.sales in (
SELECT distinct [sales]
       FROM t3
	   where [login] in (@sales_filtr) )

union all 

select * from t1
WHERE 
t1.region= ( select distinct region from t1 where t1.sales in (
SELECT distinct [sales]
       FROM t3
	   where [login] in (@sales_filtr)))

0

A co zrobisz jak zajadzie potrzeba, że pojawi się właściciel który powinien widzieć region A,B?

dla twojego zapytania zostanie zdublowany rekord:

| 201901 | Sales5 | 190    | 80       | 110          | A      |
0

co byś sugerował?

1

Jeżeli założymy, że region wynika z zależności służbowej sales5 jest przełożonym sales1 i sales2 to wystarczy taka tabela:

login SALES
sales@sales5 Sales5
sales@sales5 Sales1
sales@sales5 Sales2
sales@sales1 Sales1
sales@sales2 Sales2

i zapytanie

select * from t1
WHERE 
data in (@data_raportu)
 AND 
t1.sales in (
SELECT  [sales]
       FROM t3
       where [login] = @sales_filtr)
0

Dziękuję! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1