poniedziałek, 12 stycznia 2015

SQLS - Kopia bazy pomiędzy serwerami

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

ś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

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.

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 []")

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.

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

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