Witam.
Jest sobie zapytanie:
SELECT SSCommon.STContractors.Name, SSCommon.STContractors.NIP, DK.kod, DK.data, DP.ilosc, DP.wartNetto, DP.wartVat, FROM DK INNER JOIN DP ON DK.id = DP.super INNER JOIN SSCommon.STContractors ON DK.khid SSCommon.STContractors.Id LEFT OUTER JOIN SSCommon.STPostOfficeAddresses ON SSCommon.STContractors.ContactGuid SSCommon.STPostOfficeAddresses.ContactGuid where== 1 THEN '%B'= 1 THEN '%Ś%' ELSE '%' END )) AND (DK.data between @a4 and @a5)
ktore daje wynik:
xxx 788-00-13-026 /08/08 -08-01 1 106,29 7,44 xxx 788-00-13-026 /08/08 -08-01 1 162,93 11,41
Pytanie: Jak zrobic (najlepiej w tym samym selekcie), żeby wynik wyglądal tak (kwoty z 2 wiersza wyniku przepisane do 1 wiersza do dodatkowych kolumn) :
xxx 788-00-13-026 /08/08 -08-01 1 106,29 7,44 162,93 11,41
Bede wdzieczny za wszelkie sugestie i podpowiedzi.
Pozdrawiam
ps. jezeli podalem za malo informacji piszcie bede wklejal wiecej.
MSSQL 2005 HELP
ps. jezeli podalem za malo informacji piszcie bede wklejal wiecej.
[ciach] Tak się nie da, bo co jeśli będzie więcej produktów o tym samym kodzie? Ma multiplikować kolumny z wartościami? Jeśli tak - to nam daje resultset z niedeterministyczną ilością kolumn, a to trochę lipa, bo trzeba dynamicznie tworzyć SQL'a. Jeśli ilość produktów jest stała - to można kombinować z kursorem. Dałoby się zrobić, aby wyświetlić wszystkie wartości w jednej kolumnie, jako listę varchar, ale nie mam pojęcia czy taki efekt jest zadowalający.
SELECT SSCommon.STContractors.Name, SSCommon.STContractors.NIP, DK.kod, DK.data, DP.ilosc, DP.wartNetto, DP.wartVat, FROM DK INNER JOIN DP ON DK.id = DP.super INNER JOIN SSCommon.STContractors ON DK.khid SSCommon.STContractors.Id LEFT OUTER JOIN SSCommon.STPostOfficeAddresses ON SSCommon.STContractors.ContactGuid SSCommon.STPostOfficeAddresses.ContactGuid == 1 THEN = 1 THEN '%Ś%' ELSE '%' END )) AND (DK.data between and @a5)
ktore daje wynik:
xxx 788-00-13-026 /08/08 -08-01 1 106,29 7,44 xxx 788-00-13-026 /08/08 -08-01 1 162,93 11,41
Pytanie: Jak zrobic (najlepiej w tym samym selekcie), żeby wynik wyglądal tak (kwoty z 2 wiersza wyniku przepisane do 1 wiersza do dodatkowych kolumn) :
xxx 788-00-13-026 /08/08 -08-01 1 106,29 7,44 162,93 11,41
Bede wdzieczny za wszelkie sugestie i podpowiedzi.
!
marcin.gmail.com : Potencjalnie mozna, ale watpie, czy warto. Jest to w sumie takie samo zagadnienie, jak numerowanie rekordow zbioru wynikowego -- czyli wykraczajace POZA dzialania relacyjne, a dla nich jest optymalizowany sql.
Mozna ponumerowac rekordy o wspolnym zestawie wartosci w wybranych kolumnach, (select into tabela_tymczasowa_z_automatycznym_id order by potrzebny_porzadek) nastepnie odwzorowac numeracje do kolejnych grup kolumn. Jesli Tobie BARDZO na tym zalezy, to najpierw rozbij zadanie na etapy -- do tabel tymczasowych; kiedy uzyskasz pozadany wynik, mozesz ewentualnie probowac przeksztalcic to do mniejszej ilosci krokow, za to bardziej skomplikwanych. MSSQL ma dzialania okienkujace (a tych nie znam, mam do czynienia z ), byc moze pozwola na zwiezlejszy kod.
Moim zdaniem gra nie warta swieczki poza mozliwoscia zdobycia doswiadczenia i umiejetnosci przy tej okazji. Trzeba sie powaznie zastanowic, czy to naprawde potrzebne, a jesli tak, to ukladac wyniki po stronie aplikacji.
MSSQL ma dzialania okienkujace
Aleksander Nabagło pisze: [ciach] Przepraszam bardzo, ale co to są "dzialania okienkujace"?? Chętnie się dowiem Może chodzi Ci o CTE (Common Table Expression)?
[ciach]