[ROZW] Pivot zbyt skomplikowany dla Basea?

Użytkowanie programu bazodanowego

[ROZW] Pivot zbyt skomplikowany dla Basea?

Postprzez szczur3k » Wt lis 12, 2019 3:38 pm

Potrzebuję zaimportować dane z bazy do calca. Dane są poukładane w taki sposób, że z tabeli:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
+---------------------------+-----------+-----------+
| Data                      |   Nazwa   | Ilosc     |
+---------------------------+-----------+-----------+
| 2019-11-06 00:00:00.000   | Towar 1   |   10      |
| 2019-11-03 00:00:00.000   | Towar 2   |    2      |
| 2019-10-29 00:00:00.000   | Towar 1   |   24      |
| 2019-10-27 00:00:00.000   | Towar 2   |    8      |
| 2019-10-26 00:00:00.000   | Towar 3   |    5      |
| 2019-10-21 00:00:00.000   | Towar 1   |    7      |
| 2019-10-18 00:00:00.000   | Towar 2   |   19      |
| 2019-10-14 00:00:00.000   | Towar 1   |    4      |
| 2019-10-12 00:00:00.000   | Towar 2   |   12      |
| 2019-10-07 00:00:00.000   | Towar 1   |   26      |
| 2019-10-05 00:00:00.000   | Towar 2   |   18      |
| 2019-10-04 00:00:00.000   | Towar 3   |    9      |
+---------------------------+-----------+-----------+


wyciągam dane uzyskując taki widok:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
+-----------+-----------+
|   Nazwa   | Ilosc     |
+-----------+-----------+
| Towar 1   |   10      |
| Towar 2   |    2      |
+-----------+-----------+


a potrzebuję taki:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
+-----------+-----------+-----------+-----------+
|   Nazwa   | Tydz -1   | Tydz -2   | Tydz -3   |
+-----------+-----------+-----------+-----------+
| Towar 1   |    10     |    2      |  NULL     |
| Towar 2   |    24     |    8      |     5     |
| Towar 3   |  NULL     |    7      |    19     |
+-----------+-----------+-----------+-----------+


Stworzyłem zapytanie dzięki któremu uzyskuję ten drugi widok, ale o ile w SSMS działa ono normalnie o tyle że Base albo się wiesza na dobre, albo wywala że zapytanie nie zwróciło danych, mimo że faktycznie je zwraca. Może źle się do tego zabrałem? Zapytanie wygląda tak:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
IF OBJECT_ID('moja.dbo.tymczasowa', 'U') IS NOT NULL
  DROP TABLE moja.dbo.tymczasowa;

SELECT
   MIN(datepart(wk, V.dok_DataWyst)) Tydzien, T.tw_nazwa Nazwa, SUM(V.ob_IloscMag * V.ob_Znak) Suma
INTO nasza.dbo.tymczasowa
FROM subiekt.dbo.vwZstSprzWgKhnt V
LEFT JOIN subiekt.dbo.tw__Towar T ON T.tw_id = ob_TowId
WHERE
   dok_Status != 2 AND
   datepart(wk, dok_DataWyst) BETWEEN datepart(wk, DATEADD(wk, -9, GETDATE())) AND datepart(wk, DATEADD(wk, -1, GETDATE()))
GROUP BY T.tw_Nazwa

DECLARE @cols AS NVARCHAR(MAX),
   @query AS NVARCHAR(MAX)

SELECT @cols =
   ISNULL(@cols + ',','')
   + QUOTENAME(Tydzien)
FROM
(SELECT DISTINCT Tydzien FROM moja.dbo.tymczasowa) t

set @query = N'SELECT Nazwa,' + @cols + ' FROM moja.dbo.tymczasowa
PIVOT(
   SUM(Suma)
   FOR Tydzien IN ('+ @cols +')
) AS P
ORDER BY P.Nazwa'
EXECUTE sp_executesql @query

DROP TABLE nasza.dbo.tymczasowa


Z tego co widzę, problemy sprawia druga część zapytania, ta z pivotem, być może kwestią jest to że zapytanie jest wywołane przez EXEC-a, ale nie da rady inaczej przy dynamicznym pivocie.
Ostatnio edytowano Wt lis 12, 2019 9:35 pm przez szczur3k, łącznie edytowano 1 raz
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 9
Dołączył(a): Pt paź 11, 2019 12:14 pm

Re: Pivot zbyt skomplikowany dla Basea?

Postprzez Jan_J » Wt lis 12, 2019 7:56 pm

Wygląda mi to na proceduralną sekwencję żądań SQL; nie wiem czy można ją zaklasyfikować do PSQL, ale to mało ważne.
Base sobie poradzi co najwyżej z ujęciem funkcjonalnym, z jednym zapytaniem.
Można by przerzucić ciężar z klienta (Base) na serwer (system BD) budując odpowiednią perspektywę (CREATE VIEW).
Nie wiem w jakim systemie BD działa baza; ale jeżeli jest to wbudowany HSQLDB 1.8, to on za dużo nie umie. W Libre jest też możliwość użycia wbudowanego Firebirda, a on znacznie lepiej realizuje standardy.
JJ
LO 6.2 ∙ AOO 4.1.7 ∙ Python (3.8|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4145
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Pivot zbyt skomplikowany dla Basea?

Postprzez szczur3k » Wt lis 12, 2019 9:34 pm

Serwer stoi na MSSQL. Stworzenie widoku rozwiązało problem.
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 9
Dołączył(a): Pt paź 11, 2019 12:14 pm


Powrót do Base

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość