Modyfikacja kodu SQL - SELECT - pod raport

Modyfikacja kodu SQL - SELECT - pod raport
Aleksander Aleksander
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
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.

Kopiuj
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:

Kopiuj
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

Kopiuj
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źć?

Aleksander Aleksander
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

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

Aleksander Aleksander
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Utworzyłem oddzielną tabele

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

a potem tylko napisałem

Kopiuj
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)))

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
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:

Kopiuj
| 201901 | Sales5 | 190    | 80       | 110          | A      |
Aleksander Aleksander
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

co byś sugerował?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
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

Kopiuj
select * from t1
WHERE 
data in (@data_raportu)
 AND 
t1.sales in (
SELECT  [sales]
       FROM t3
       where [login] = @sales_filtr)
Aleksander Aleksander
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Dziękuję! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.