TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
Jak zwrócić wartość zapytania SQL -> EXCEL , ReMoS 2/11/11 18:36 Witam,
czy da radę tak zrobić jakoś aby w komórce Excela w "formule" wpisać zapytanie do bazy SQL? Tak aby zwrócona wartość pokazała się mi w tej komórce.Nie ufaj każdemu, kto zawsze mówi
uwierz mi. - Gotowej formuły nie ma , bwana 2/11/11 18:51
musiałbyś stworzyć makro w VBA i zarejestrować to makro jako formułę. Ale może wystarczy Ci np. zdefiniowanie źródła danych (polecenie SQL) i podlinkowanie go jako zakresu w Excelu?"you don't need your smile when I cut
your throat" - Da się , ligand17 2/11/11 19:15
to zrobić. Działa np. z bazą Oracle - w polu tekstowym wpisuje się polecenie SQL, a makro zwraca wyniki zapytania do nowego arkusza. - A można coś bliżej podpowiedzieć jak to miałoby wyglądać. , ReMoS 2/11/11 19:21
Lub przybliże temat, który porzebuję zrobić.
Otóż w bazie danych występują dokumenty różne (sprzedaż,zakup, magazynowe etc.)
Wystawiane te dokumenty są przez różne osoby i teraz zadanie jest takie aby policzyć ile dokumentów jaki operator wykonał.
Mogę to uzyskać zapytaniem w Managment Studio:
SELECT count (*) from CDN.TraNag where Trn_OpeNumerW = 3 and Trn_GIDTyp = 2034 and TrN_VatRok = 2010
Gdzie otrzymam zwrotną informację.
Nie jestem mocny w sql, nie wiem jak stworzyć jakieś zaawnasowane zapytanie, które być może pozwoliłoby mi osiągnąć zamierzony cel. Stąd pomysł na excela i tam utworzyłbym "powiązania" etc.
A tak to ręcznie mi pozostaje odpytywać bazę!?
Czy może jest na to jakiś inny sposób?Nie ufaj każdemu, kto zawsze mówi
uwierz mi. - Ja zrobiłbym to tak , bwana 2/11/11 19:40
Stworzyłbym na bazie widok
XXDokumentyCnt as
select count(1) liczba_dokumentow, trn_openumerw, trn_gidtyp, trn_vatrok
from cdn.tranag
group by trn_openumerw, trn_gidtyp, trn_vatrok
Potem w Excelu stworzyłbym źródło danych wskazujące na ten widok, wypełniające zakres (w jakimś osobnym arkuszu tego pliku Excel). Pojedyncze zapytanie wypełniałoby zakres wszystkimi zliczeniami dla wszystkich istniejących w bazie kombinacji roku VAT, typu i numeru operatora. W takim wyniku (zakresie) wyszukiwałbym funkcją "wyszukaj.pionowo".
Ma to rozwiązanie swoje wady i zalety, nie wiem, czy Cię interesuje taki sposób - jeśli tak, to daj znać - poprodukuję się bardziej."you don't need your smile when I cut
your throat" - Pewnie, że pasowałoby, , ReMoS 2/11/11 19:52
aczkolwiek już teraz po wklejeniu przeze mnie:
select count(1) liczba_dokumentow, trn_openumerw, trn_gidtyp, trn_vatrok
from cdn.tranag where Trn_OpeNumerW = 3
group by trn_openumerw, trn_gidtyp, trn_vatrok
order by trn_gidtyp
Mam już sprawę ułatwioną bo otrzymuję Dla konkretnego operatora wszsytkie dokumenty za zadany okres (tj okrest tutaj akurat całość, ale to też można zawęzić). Pozostaje tylko sobie rozpisać trn_gidtyp jaka cyfra to jaki dokument.
Aczkolwiek niedo końca rozumiem zapytanie (oj przydałoby się jakieś szkolenie, przydało). Tj. muszę potem powalczyć jak działa to group i dlaczego jest (1) w select count.Nie ufaj każdemu, kto zawsze mówi
uwierz mi. - komentuję i wyjaśniam , bwana 3/11/11 07:34
count() - zliczenie wierszy. Jeżeli w zapytaniu dalej jest group by element1, element2 to dostajemy wszystkie różne kombinacje wierszy składających się z element1, element2 i zliczenie tych kombinacji. Dla Twojego przykładu (wynik wymyślam)
count | trn_gidtyp | trn_vatrok
-----------------------------
100, 23, 1998
123, 28, 1998
231, 31, 1998
321, 23, 1999
456, 28, 1999
874, 31, 1999
-------
czyli 100 dokumentów operatora nr 23 w roku 1998; 123 dokumenty operatora nr 28 w roku 1998 i tak dalej.
count(1) działa nieco szybciej niż count(*) bo bada jedną wartość (wartość natychmiastową aka literał - liczbę 1 - można wpisać count (1000) albo count(sysdate) z takim samym efektem).
Słowem - masz w wyniku wszystkie możliwe obliczenia, które chciałbyś dostać z bazy danych - załatwiasz to jednym zapytaniem.
Co do budowy Excela założyłem że masz "dużo" wierszy, dla których chcesz poznać wartość zliczenia (count). Jeśli dla każdego wiersza będziesz wykonywał zapytanie dokładne (czyli z warunkiem where) to tyle ile masz wierszy, tyle zapytań Excel prześle do bazy - to może trwać dużo dłużej niż pobranie naraz całego wyniku (tego "mojego") i lokalnie w arkuszu wyszukanie właściwej wartości formułą (np. wyszukaj.pionowo).
Pomogłem?"you don't need your smile when I cut
your throat" - co do słownika typów dokumentów - pomoże JOIN , bwana 3/11/11 07:44
nawiązując do Twojego zapytania i zakładając, że typy dokumentów są w tabeli cdn.typy_dokumentow:
select count(1) liczba_dokumentow, trn_openumerw, trn_gidtyp, trn_vatrok, td.nazwa_typu_dokumentu
from cdn.tranag tra join cdn.typy_dokumentow td on tra.trn_gidtyp = td.id_typu_dokumentu
where Trn_OpeNumerW = 3
group by trn_openumerw, trn_gidtyp, trn_vatrok, td.nazwa_typu_dokumentu
order by trn_gidtyp
i masz załatwioną sprawę."you don't need your smile when I cut
your throat"
- o Optima sie kłania.. , Glock19 2/11/11 19:36
lub XL- XL. , ReMoS 2/11/11 19:58
XL.Nie ufaj każdemu, kto zawsze mówi
uwierz mi.
- Tabelą przestawną to załatwiamy w XL'u , McIsland 2/11/11 20:14
jakos działa, ale tabela ciągnie z przygotowanego widokuGTD ... |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|