Dane z 3 tabel w jednym wierszu

0

Witajcie,
Mam następujący dylemat. Przykładowe tabele:

Tabela A
--------
IDA	PA1	PA2
1	WA1	WA2
2	WA3	WA4

Tabela B
--------
IDB	PB1	PB2
1	WB1	WB2

Tabela C
--------
IDC	IDA	IDB	PC1	PC2
1	1	1	WC1	WC2
2	2	1	WC3	WC4


Chciałbym wykonać zapytanie/stworzyć widok, który dałby mi w wyniku jeden wiersz:


|PB1  |  PB2  |  PC1  |  PC2  |  PC1  |  PC2  |
|	          |   WA1 - WA2   |   WA3 - WA4   |
-----------------------------------------------
|WB1  |WB2    |WC1    |WC2    |WC3    |WC4    |
-----------------------------------------------

Czy jest to w ogóle możliwe??

0

Masz już coś? Na podatnie opisu nie jestem w stanie wywnioskować, o co ci chodzi.
I co to oznacza: WA1 - WA2 ?

0
Buster napisał(a):

Witajcie,
Mam następujący dylemat. Przykładowe tabele:

Tabela A
--------
IDA	PA1	PA2
1	WA1	WA2
2	WA3	WA4

Tabela B
--------
IDB	PB1	PB2
1	WB1	WB2

Tabela C
--------
IDC	IDA	IDB	PC1	PC2
1	1	1	WC1	WC2
2	2	1	WC3	WC4


Chciałbym wykonać zapytanie/stworzyć widok, który dałby mi w wyniku jeden wiersz:


|PB1  |  PB2  |  PC1  |  PC2  |  PC1  |  PC2  |
|	          |   WA1 - WA2   |   WA3 - WA4   |
-----------------------------------------------
|WB1  |WB2    |WC1    |WC2    |WC3    |WC4    |
-----------------------------------------------

Czy jest to w ogóle możliwe??

Witaj,

generalnie tak - to jest możliwe, pod warunkiem, że miedzy tymi tabelami i wierszami masz jakiś logiczny zwiążek np:
czyli IDA, IDB i IDC mają takie samo ID i jeden wiersz który im odpowiada.
Wtedy trzeba w zapytaniu musisz zrobić join.
Jeśli takiej logiki nie ma, w wyniku otrzymasz iloczyn kartezjański (czyli kombinację wszystkich możliwości występowania wartości).

0

Prawdopodobnie chodzi o to aby na podstawie klucza IDA dane trafiały do odpowiedniej kolumny :)

0
S4t napisał(a):

Masz już coś? Na podatnie opisu nie jestem w stanie wywnioskować, o co ci chodzi.
I co to oznacza: WA1 - WA2 ?

To są wartości tabeli A. To są tabele z jednego systemu ERP i muszę zestawienie zrobić. A nie chcę powielać rekordów.

1
Buster napisał(a):
S4t napisał(a):

Masz już coś? Na podatnie opisu nie jestem w stanie wywnioskować, o co ci chodzi.
I co to oznacza: WA1 - WA2 ?

To są wartości tabeli A. To są tabele z jednego systemu ERP i muszę zestawienie zrobić. A nie chcę powielać rekordów.

Skoro o JOIN nie słyszałeś, to nie jesteś właściwym wykonawcą do tego zadania

0

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

0
Buster napisał(a):

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

To jeśli chcesz dla jednego magazynu i magazyn ma jeden normatyw to warunek, czyli
WHERE magazyn = wybrany magazyn
jeśli magazyn ma więcej niż jeden normatyw to
WHERE magazyn = wybrany magazyn AND normatyw = wybrany normatyw

0
TytusRomek napisał(a):
Buster napisał(a):

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

To jeśli chcesz dla jednego magazynu i magazyn ma jeden normatyw to warunek, czyli
WHERE magazyn = wybrany magazyn
jeśli magazyn ma więcej niż jeden normatyw to
WHERE magazyn = wybrany magazyn AND normatyw = wybrany normatyw

Ale to ma tak nie działać, bo to jest zestawienie ogólne. Chcą wszystko widzieć od razu. Czyli:

|Kod towaru|Nazwa towaru|Normatywy dla magazynu A|Normatywy dla magazynu B|

0
Buster napisał(a):
|Kod towaru|Nazwa towaru|Normatywy dla magazynu A|Normatywy dla magazynu B|

Zaledwie w 2327 odcinku brazylijskiego serialu dowiemy sie prawdy

To się nazywa pivot, implementuje sie to nieco odmiennie dla różnych baz, ale w każdej jest

0
Buster napisał(a):

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

Poczytaj o pivocie https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16

0
Buster napisał(a):
TytusRomek napisał(a):
Buster napisał(a):

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

To jeśli chcesz dla jednego magazynu i magazyn ma jeden normatyw to warunek, czyli
WHERE magazyn = wybrany magazyn
jeśli magazyn ma więcej niż jeden normatyw to
WHERE magazyn = wybrany magazyn AND normatyw = wybrany normatyw

Ale to ma tak nie działać, bo to jest zestawienie ogólne. Chcą wszystko widzieć od razu. Czyli:

|Kod towaru|Nazwa towaru|Normatywy dla magazynu A|Normatywy dla magazynu B|

OK, ten komentarz zmienia nieco sytuację. W takim razie sprawdz CASE
CASE = normatyw A as KolumnaA
CASE = Normatyw B as KolumnaB

wtedy z różnych wierszy zrobisz oddzielne kolumny w zależności od ich wartosci

0
S4t napisał(a):
Buster napisał(a):

To może tak. Rozwinę, żeby nie było. Tabela A, zawiera dane o magazynach, tabela B o towarach, a tabela C o tzw w tym systemie normatywach na konkretnych magazynach (ilość minimalna, maksymalna i zamawiana).
@AnyKtokolwiek: Słyszałem o JOIN.
I teraz tak. Jeśli normatywy są wpisane dla dwóch magazynów, to przy takim klasycznym SELECT kolumny FROM tabela A INNER JOIN tabela B INNER JOIN tabela C, dostanę w wyniku 2 wiersze, bo tyle jest wpisów w tabeli z normatywami. A ja chciałbym osiągnąć, aby otrzymać jeden wiersz, a informacje o kolejnych ewentualnych magazynach, aby pokazywały się jako kolejne kolumny.

Poczytaj o pivocie https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16

Właśnie też to znalazłem i to chyba jest rozwiązanie.

3

Gorzej niż na elektrodzie. Wstyd panowie

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