Cześć,
ogólnie temat jest bardziej skomplikowany niz w temacie :)
to moze powklejam co trzeba i napisze co chciałbym osiągnąć.
CREATE TABLE #TabeleWithData(NrSklepu int, Miasto varchar(50),Statu TINYINT)
insert into #TabeleWithData
values
(1,'Warszawa',1),(2,'Warszawa',5),(3,'Warszawa',5),(4,'Warszawa',2),(5,'Warszawa',3),(6,'Warszawa',5),(7,'Warszawa',1),(8,'Warszawa',3),(9,'Warszawa',4),(10,'Warszawa',2)
,(11,'Łódź',4),(12,'Łódź',1),(13,'Łódź',2),(14,'Łódź',3),(15,'Łódź',5),(16,'Łódź',1),(17,'Łódź',3),(18,'Łódź',5),(19,'Łódź',1),(20,'Łódź',3)
,(21,'Poznań',5),(22,'Poznań',2),(23,'Poznań',1),(24,'Poznań',4),(25,'Poznań',3),(26,'Poznań',1),(27,'Poznań',5),(28,'Poznań',3),(29,'Poznań',2),(30,'Poznań',1)
Tabela wygląda mniej więcej tak:
NrSklepu | Miasto | Status |
---|---|---|
1 | Warszawa | 1 |
2 | Warszawa | 5 |
3 | Warszawa | 5 |
4 | Warszawa | 2 |
5 | Warszawa | 3 |
11 | Łódź | 4 |
12 | Łódź | 1 |
13 | Łódź | 2 |
14 | Łódź | 3 |
15 | Łódź | 5 |
21 | Poznań | 5 |
22 | Poznań | 2 |
23 | Poznań | 1 |
24 | Poznań | 4 |
25 | Poznań | 3 |
Ccę otrzymać coś takiego:
Warszawa | StatusSklepuZWarszawy | Łódź | StatusSklepuZŁodzi | Poznań | StatusSklepuZWarszawyPoznania |
---|---|---|---|---|---|
1 | 1 | 11 | 4 | 21 | 5 |
2 | 5 | 12 | 1 | 22 | 2 |
3 | 5 | 13 | 2 | 23 | 1 |
4 | 2 | 14 | 3 | 24 | 4 |
5 | 3 | 15 | 5 | 25 | 3 |
6 | 5 | 16 | 1 | 26 | 1 |
7 | 1 | 17 | 3 | 27 | 5 |
8 | 3 | 18 | 5 | 28 | 3 |
9 | 4 | 19 | 1 | 29 | 2 |
10 | 2 | 20 | 3 | 30 | 1 |
Więc zrobilem sobie takiego pivota
;WITH CUST_CTE2
AS
(
SELECT NrSklepu,Miasto, ROW_NUMBER() OVER (PARTITION BY (Miasto)ORDER BY NrSklepu) AS RID FROM #TabeleWithData
)
SELECT
[Warszawa]
,[Łódź]
,[Poznań]
INTO
#AfterPivot
FROM
(SELECT NrSklepu,Miasto,RID
FROM CUST_CTE2)C
PIVOT
(
max(NrSklepu)
FOR Miasto IN ([Warszawa],[Łódź],[Poznań])
) AS PivotTable;
Który w efekcie dał mi takie dane:
Warszawa | Łódź | Poznań |
---|---|---|
1 | 11 | 21 |
2 | 12 | 22 |
3 | 13 | 23 |
4 | 14 | 24 |
5 | 15 | 25 |
6 | 16 | 26 |
7 | 17 | 27 |
8 | 18 | 28 |
9 | 19 | 29 |
10 | 20 | 30 |
no i fajnie prawie, ale jak juz wczesniej wspomniałem potrzebuję troche w innym formacie:
udało mi sięuzyskać mój forma w taki sposób
SELECT
t1.Warszawa
,t2.Statu AS StatusSklepuZWarszawy
,t1.Łódź
,t3.Statu AS StatusSklepuZŁodzi
,t1.Poznań
,t4.Statu AS StatusSklepuZWarszawyPoznania
from
#AfterPivot t1
LEFT JOIN
#TabeleWithData t2 on t1.Warszawa=t2.NrSklepu
LEFT JOIN
#TabeleWithData t3 on t1.Łódź=t3.NrSklepu
LEFT JOIN
#TabeleWithData t4 on t1.Poznań=t4.NrSklepu
No i wszystko działa ja knależy, ale macie pomysł może ja kzrobić to bez potrzeby kilku Left Joinow?
Bo docelowo to zapytanie ma miec okolo 10 miast co za tym idzie musialbym robic 10 joinow, a nie chce robic czegos na odpierdziel tylko cos przemyslanego.
bede bardzo wdzięczny za pomoc :)