Jak wiadomo, bazy danych to poważna sprawa!
Tak śmiertelnie poważna, że można walnąć w ramki i się
przykryć nogami ze śmiechu, jak się widzi, jak bazodanowcy tej
powagi bronią.
A tu, weźmy sobie bazkę w bardzo poważnym MS SQL Server Express i
zróbmy sobie jej kopię do jeszcze bardziej śmiertelnie poważnego
MS SQL Server 2012 BI.
Sterownikiem accessowym, a co, nie wolno?
Klikając STARTA w Excelku, oczywiście.
Filmik:
http://afin.net/webcasts/Demo_AfinNetIs_CopySqlsDb1ToSqlsDb2.swf
poniedziałek, 12 stycznia 2015
środa, 7 stycznia 2015
Ciekawostka SQL: Sprzedaż wg grup dat, niekoniecznie mających ową sprzedaż
No..., to trzeba potraktować daty... iloczynem kartezjańskim! (widok t1), po to, że jak nie ma daty, to trzeba ją zrobić, by potem dołączyć do niej, nieistniejącą dla niej, sprzedaż (widok t2).
Warto się uczyć SQLka, chłopaki i dziewczyny.
*************
> [author]Jacek P.:[/author]
> Witam,
> mam kwerendę, która wyświetla pewne wartości dla miesięcy w
> danych latach. Technicznie kwerenda oparta jest o inną kwerendę
> a ta o tabelę. Nie dla każdego miesiąca mam wartości w tabeli
> stąd moja kwerenda wynikowa wyświetla tylko niektóre miesiące.
> Jak zrobić żeby w wyniku mieć wszystkie miesiące począwszy od
> danej daty, ze stałymi wartościami dla miesięcy, które nie
> pojawiają się w tabeli?
SQLek:
SELECT t1.[DataRM], t2.[Sprzedaz] FROM
(SELECT DISTINCT FORMAT(r.[data],'yyyy') & '.' &
FORMAT(m.[data],'mm') AS [DataRM] FROM [Faktura$] r, [Faktura$] m)
t1
LEFT OUTER JOIN
(SELECT FORMAT([data],'yyyy.mm') AS [DataRM], SUM([wart_net]) AS
[Sprzedaz] FROM [Faktura$] GROUP BY FORMAT([data],'yyyy.mm')) t2
ON t1.[DataRM]=t2.[DataRM]
Tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Faktura.htm
Wynik:
DataRM Sprzedaz
2004.01 140
2004.02 41
2004.03 118,4
2004.04 153,9
2004.05 42,6
2004.06 15
2004.07 5
2004.08 3,9
2004.09 13,6
2004.10 5,8
2004.11 4,5
2004.12 11
2005.01 5,2
2005.02 25,5
2005.03 5,5
2005.04 10,4
2005.05 0
2005.06 4,8
2005.07 16,2
2005.08 40,5
2005.09 0
2005.10 0
2005.11 0
2005.12 0
Warto się uczyć SQLka, chłopaki i dziewczyny.
*************
> [author]Jacek P.:[/author]
> Witam,
> mam kwerendę, która wyświetla pewne wartości dla miesięcy w
> danych latach. Technicznie kwerenda oparta jest o inną kwerendę
> a ta o tabelę. Nie dla każdego miesiąca mam wartości w tabeli
> stąd moja kwerenda wynikowa wyświetla tylko niektóre miesiące.
> Jak zrobić żeby w wyniku mieć wszystkie miesiące począwszy od
> danej daty, ze stałymi wartościami dla miesięcy, które nie
> pojawiają się w tabeli?
SQLek:
SELECT t1.[DataRM], t2.[Sprzedaz] FROM
(SELECT DISTINCT FORMAT(r.[data],'yyyy') & '.' &
FORMAT(m.[data],'mm') AS [DataRM] FROM [Faktura$] r, [Faktura$] m)
t1
LEFT OUTER JOIN
(SELECT FORMAT([data],'yyyy.mm') AS [DataRM], SUM([wart_net]) AS
[Sprzedaz] FROM [Faktura$] GROUP BY FORMAT([data],'yyyy.mm')) t2
ON t1.[DataRM]=t2.[DataRM]
Tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Faktura.htm
Wynik:
DataRM Sprzedaz
2004.01 140
2004.02 41
2004.03 118,4
2004.04 153,9
2004.05 42,6
2004.06 15
2004.07 5
2004.08 3,9
2004.09 13,6
2004.10 5,8
2004.11 4,5
2004.12 11
2005.01 5,2
2005.02 25,5
2005.03 5,5
2005.04 10,4
2005.05 0
2005.06 4,8
2005.07 16,2
2005.08 40,5
2005.09 0
2005.10 0
2005.11 0
2005.12 0
Ciekawostka SQL: Tylko pierwsi!
Ciekawe! Jak wyciągnąć TYLKO PIERWSZY REKORD w danej grupie
rekordów, ale nie ograniczając widoku do tej grupy, tylko po
wszystkich grupach z tabeli.
Kluczem jest relacja tabeli z SELECTem zagnieżdżonym, tworzącym
pole tej tabeli (RowNum)
Warto się uczyć SQLka, chłopaki i dziewczyny.
************
SELECT t1.miasto, t1.nazwa,
(SELECT COUNT(*) FROM [odbiorca$] AS t2 WHERE t2.nazwa <=
t1.nazwa AND t1.miasto = t2.miasto) AS RowNum
FROM [odbiorca$] t1
WHERE (SELECT COUNT(*) FROM odbiorca AS t2 WHERE t2.nazwa <=
t1.nazwa AND t1.miasto = t2.miasto) =1
ORDER BY t1.miasto, t1.nazwa
tu tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Odbiorca.htm
A tu wynik:
miasto nazwa RowNum
BIALYSTOK NOWAK 1
CIECHANOW ANEX 1
GDANSK GRZESIEX 1
LEGNICA EDEX 1
OPOLE BRONEX 1
SZCZECIN CELIMP 1
WARSZAWA IMPEX 1
WROCLAW AREX 1
Tylko pierwsze numerki. Bez OVER PARTITION BY.
Zrobiłem na podstawie
http://www.experts-exchange.com/Database/MS_Access/Q_24583991.html
z PLIKU EXCELA na STEROWNIKU EXCELOWYM.
rekordów, ale nie ograniczając widoku do tej grupy, tylko po
wszystkich grupach z tabeli.
Kluczem jest relacja tabeli z SELECTem zagnieżdżonym, tworzącym
pole tej tabeli (RowNum)
Warto się uczyć SQLka, chłopaki i dziewczyny.
************
SELECT t1.miasto, t1.nazwa,
(SELECT COUNT(*) FROM [odbiorca$] AS t2 WHERE t2.nazwa <=
t1.nazwa AND t1.miasto = t2.miasto) AS RowNum
FROM [odbiorca$] t1
WHERE (SELECT COUNT(*) FROM odbiorca AS t2 WHERE t2.nazwa <=
t1.nazwa AND t1.miasto = t2.miasto) =1
ORDER BY t1.miasto, t1.nazwa
tu tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Odbiorca.htm
A tu wynik:
miasto nazwa RowNum
BIALYSTOK NOWAK 1
CIECHANOW ANEX 1
GDANSK GRZESIEX 1
LEGNICA EDEX 1
OPOLE BRONEX 1
SZCZECIN CELIMP 1
WARSZAWA IMPEX 1
WROCLAW AREX 1
Tylko pierwsze numerki. Bez OVER PARTITION BY.
Zrobiłem na podstawie
http://www.experts-exchange.com/Database/MS_Access/Q_24583991.html
z PLIKU EXCELA na STEROWNIKU EXCELOWYM.
wtorek, 9 grudnia 2014
Eksport SQLS2TXT jako "Job"
Jest problem.
http://www.goldenline.pl/grupy/Komputery_Internet/bazy-danych/job-dbms-ktorego-efektem-bedzie-odkladanie-pliku-do-wskazanej-lokalizacji,3558863/
Nie ma problema.
http://afin.net/webcasts/Demo_AfinNetIs_SQLS2TXT_Job.swf
Oczywizda, tam trzeba dać namiary na bazkę Łoraklową, ale,
chwilowo nie mam takowej na kompie, więc pokazik na SQL Serverze.
Ciekawostka - na sterowniku Accessowym! (bo tylko taki rozumie "INTO
IN []")
http://www.goldenline.pl/grupy/Komputery_Internet/bazy-danych/job-dbms-ktorego-efektem-bedzie-odkladanie-pliku-do-wskazanej-lokalizacji,3558863/
Nie ma problema.
http://afin.net/webcasts/Demo_AfinNetIs_SQLS2TXT_Job.swf
Oczywizda, tam trzeba dać namiary na bazkę Łoraklową, ale,
chwilowo nie mam takowej na kompie, więc pokazik na SQL Serverze.
Ciekawostka - na sterowniku Accessowym! (bo tylko taki rozumie "INTO
IN []")
poniedziałek, 17 listopada 2014
SQL: Join na tabelach z różnych baz danych
SELECT * FROM
(SELECT * FROM [Odbiorca.txt] IN 'c:\kursexcela\dane\Baza_txt'[Text;]) t1
INNER JOIN
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t2
ON t1.nazwa=t2.nazwa
Żeby było śmieszniej, to składam te tabelki z pliku TEKSTOWEGO i
bazy ACCESSA na sterowniku EXCELOWYM!
A co, nie wolno?!
http://afin.net/webcasts/ZZZ_SqlEditor_InnerJoin_DifferentDBs.swf
PS
Luknijcie przez ten łindow do specyjalistów, bo chłopaki tam
problem jakiś mają...
http://www.goldenline.pl/grupy/Komputery_Internet/bazy-danych/zapytanie-do-dwoch-baz-danych-w-sql-developer,3540743/
#2
Idąc za ciosem, spróbowałem zrobić to samo, ale Z TRZECH, RÓŻNYCH BAZ.
Z INNER JOIN-ami się nie udało.
Spróbowałem inaczej - z WHERE-m.
I to działa!
Driver={Microsoft Excel Driver (*.xls)}; DBQ=C:\
SELECT * FROM
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t1,
(SELECT * FROM [Odbiorca.txt] IN 'c:\kursexcela\dane\Baza_txt'[Text;]) t2,
(SELECT * FROM [Region] IN 'c:\kursexcela\dane\baza_dbf'[dbase IV;]) t3
WHERE t1.nazwa=t2.nazwa AND t2.miasto=t3.miasto
Czyli kleję do jednej, szerokiej tabeli dane z MDB, TXT i DBF, a wszystko na sterowniku excelowym.
(SELECT * FROM [Odbiorca.txt] IN 'c:\kursexcela\dane\Baza_txt'[Text;]) t1
INNER JOIN
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t2
ON t1.nazwa=t2.nazwa
Żeby było śmieszniej, to składam te tabelki z pliku TEKSTOWEGO i
bazy ACCESSA na sterowniku EXCELOWYM!
A co, nie wolno?!
http://afin.net/webcasts/ZZZ_SqlEditor_InnerJoin_DifferentDBs.swf
PS
Luknijcie przez ten łindow do specyjalistów, bo chłopaki tam
problem jakiś mają...
http://www.goldenline.pl/grupy/Komputery_Internet/bazy-danych/zapytanie-do-dwoch-baz-danych-w-sql-developer,3540743/
#2
Idąc za ciosem, spróbowałem zrobić to samo, ale Z TRZECH, RÓŻNYCH BAZ.
Z INNER JOIN-ami się nie udało.
Spróbowałem inaczej - z WHERE-m.
I to działa!
Driver={Microsoft Excel Driver (*.xls)}; DBQ=C:\
SELECT * FROM
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t1,
(SELECT * FROM [Odbiorca.txt] IN 'c:\kursexcela\dane\Baza_txt'[Text;]) t2,
(SELECT * FROM [Region] IN 'c:\kursexcela\dane\baza_dbf'[dbase IV;]) t3
WHERE t1.nazwa=t2.nazwa AND t2.miasto=t3.miasto
Czyli kleję do jednej, szerokiej tabeli dane z MDB, TXT i DBF, a wszystko na sterowniku excelowym.
wtorek, 4 listopada 2014
Funkcja DANE() - parametryzacja WHERE'a i FROM'a w SQL w prostej funkcji
Zrobiłem sobie tabelę 4M rekordów, gdzie data min=2013.01.01 a
max 2014.02.jakisdzien co ileś tam sekund
Podzieliłem ją na 14 tabel miesięcznych bo tyle wyszło - każda
ma 310.000
Zapytanie SELECT SUM(ID) FROM t01 WHERE
FORMAT(data,'yyyy.mm.dd')='2013.01.01'
TRWA OK. 2 SEKUND
ZERO indeksu, ZERO partycji, głupi Access i to jeszcze .mdb
Sztuczka jest jedna - podawany PARAMETR daty (konkretnie: miesiąc)
wpisuje się jednocześnie w WHERE'a i we FROM'a
Wiem, wiem, nie wszystkie narzędzia to potrafią. Cóż...
Jakbym jeszcze wydzielił to na tygodnie albo dni, byłby błysk do
kwadratu.
PS
Ponieważ nie lubię być gołosłownym...
http://afin.net/webcasts/ZZZ_MojaFunkcja_PodzialDanychNaMiesiace.swf
max 2014.02.jakisdzien co ileś tam sekund
Podzieliłem ją na 14 tabel miesięcznych bo tyle wyszło - każda
ma 310.000
Zapytanie SELECT SUM(ID) FROM t01 WHERE
FORMAT(data,'yyyy.mm.dd')='2013.01.01'
TRWA OK. 2 SEKUND
ZERO indeksu, ZERO partycji, głupi Access i to jeszcze .mdb
Sztuczka jest jedna - podawany PARAMETR daty (konkretnie: miesiąc)
wpisuje się jednocześnie w WHERE'a i we FROM'a
Wiem, wiem, nie wszystkie narzędzia to potrafią. Cóż...
Jakbym jeszcze wydzielił to na tygodnie albo dni, byłby błysk do
kwadratu.
PS
Ponieważ nie lubię być gołosłownym...
http://afin.net/webcasts/ZZZ_MojaFunkcja_PodzialDanychNaMiesiace.swf
wtorek, 28 października 2014
SQL: Join na tabelach z dwóch różnych baz danych
SELECT * FROM
(SELECT * FROM [Odbiorca.txt] IN
'c:\kursexcela\dane\Baza_txt'[Text;]) t1
INNER JOIN
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t2
ON t1.nazwa=t2.nazwa
Żeby było śmieszniej, to składam te tabelki z pliku TEKSTOWEGO i
bazy ACCESSA na sterowniku EXCELOWYM!
A co, nie wolno?!
http://afin.net/webcasts/ZZZ_SqlEditor_InnerJoin_DifferentDBs.swf
(SELECT * FROM [Odbiorca.txt] IN
'c:\kursexcela\dane\Baza_txt'[Text;]) t1
INNER JOIN
(SELECT * FROM [Faktura] IN 'c:\kursexcela\dane\sprzedaz.mdb') t2
ON t1.nazwa=t2.nazwa
Żeby było śmieszniej, to składam te tabelki z pliku TEKSTOWEGO i
bazy ACCESSA na sterowniku EXCELOWYM!
A co, nie wolno?!
http://afin.net/webcasts/ZZZ_SqlEditor_InnerJoin_DifferentDBs.swf
Subskrybuj:
Posty (Atom)