Paweł Niklewicz

Paweł Niklewicz Konsultant ERP

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Witajcie,

Mam problem z zapytaniem, stworzyłem zapytanie planu kont, które w późniejszym czasie automatycznie jest odświeżane z pliku - Ex-celowego.

Problem dotyczy tego typu, że w systemie i w firmie używamy kalendarz 12 miesięczny, na żądanie grypy jestem zmuszony podzielić raport na inne całkowicie daty

np;

styczeń - 10.01.2013 do 15.02.2013
luty 16.02.2013 - 23.03.2013

Czy jest możliwy jakiś grup by, który pomoże mi podzielić sumy na rożne grupy ?

konto usunięte

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Tak.
Grupowanie po zbiorach wyliczanych może byc realizowane przez funkcje analityczne.
http://andrzejklusiewicz.blogspot.com/2010/11/kurs-ora...
http://andrzejklusiewicz.blogspot.com/2010/11/kurs-ora...

dopiero zauwazylem ze chodzi o T-SQLa, niestety technicznie nie pomoge.
TSQL tez ma funkcje analityczne.Piotr Potapczuk edytował(a) ten post dnia 09.04.13 o godzinie 16:49

konto usunięte

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Paweł N.:
Witajcie,

Mam problem z zapytaniem, stworzyłem zapytanie planu kont, które w późniejszym czasie automatycznie jest odświeżane z pliku - Ex-celowego.

Problem dotyczy tego typu, że w systemie i w firmie używamy kalendarz 12 miesięczny, na żądanie grypy jestem zmuszony podzielić raport na inne całkowicie daty

np;

styczeń - 10.01.2013 do 15.02.2013
luty 16.02.2013 - 23.03.2013

Czy jest możliwy jakiś grup by, który pomoże mi podzielić sumy na rożne grupy ?

zrób sobie mapowanie w tabelce
generujesz daty na kilka lat w przód i przypisujesz okresy do dat
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Stwórz tablicę:
tbl_okresy_rozliczeniowe
zawierającą kolumny:
nazwa_okresu, data_od, data_do
(chociaż może lepiej spróbuj znaleźć w systemie - prawdopodobnie gdzieś taka tabela istnieje)

Potem utwórz zapytanie w tym stylu:

Select
tab_1.kolumny_z_tab_1,
......
tbl_okresy_rozliczeniowe.nazwa_okresu
from
tab_1,
tbl_okresy_rozliczeniowe
where
tab_1.data_z_tab1 between tbl_okresy_rozliczeniowe.data_od and tbl_okresy_rozliczeniowe.data_do
group by
tbl_okresy_rozliczeniowe.nazwa_okresu

Wojciech Muszyński edytował(a) ten post dnia 09.04.13 o godzinie 19:01
Grzegorz K.

Grzegorz K. Data & Analytics
Engineer

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

wspomniany pomysł z tabelką jest bardzo dobry.

Jeśli z jakiś względów nie możesz go zastosować, a możesz pozwolić sobie takie niepraktyczne/nierealne założenie, że przedziały dni dla okresów w poszczególnych latach nie będą się zmieniać to możesz kombinować coś w tym stylu:



;with CTE_przejsciowe as (
select *,
month(data)*100 + day(data) as Miesiac_Dzien,
cast(year(data) as varchar(4)) as rok
from Twoja_tabela
)

select *,
case
when Miesiac_Dzien < 110 then rok + ' okres1'
when Miesiac_Dzien between 111 and 215 then rok + ' okres2'
when Miesiac_Dzien between 216 and 323 then rok + ' okres3'
...
end as okres -- po tym mozna by zrobic juz group by
from CTE_przejsciowe



Ogólnie jednak tabelka jest dużo lepsza, bo okresy w każdym roku możesz zdefiniować niezależnie, a i zapytanie będzie bardziej optymalne (indeks na datę itp.).Grzegorz K. edytował(a) ten post dnia 09.04.13 o godzinie 23:30
Paweł Niklewicz

Paweł Niklewicz Konsultant ERP

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Dopiero teraz wracam do tematu.

W wypadku:

month(data)*100 + day(data) as Miesiac_Dzien,
cast(year(data) as varchar(4)) as rok
from Twoja_tabela

czy mam możliwość podmiany daty na postać kolumn bazy danych.
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

PIVOT
Grzegorz K.

Grzegorz K. Data & Analytics
Engineer

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Paweł N.:
Dopiero teraz wracam do tematu.

W wypadku:

month(data)*100 + day(data) as Miesiac_Dzien,
cast(year(data) as varchar(4)) as rok
from Twoja_tabela

czy mam możliwość podmiany daty na postać kolumn bazy danych.

Mógłbyś przeformułować swoje pytanie? bo nie bardzo rozumiem .. W przytoczonym przykładzie zakładam, że [data] jest jakąś tam kolumną w formacie datowym np.datetime.

konto usunięte

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

Paweł N.:
Dopiero teraz wracam do tematu.

W wypadku:

month(data)*100 + day(data) as Miesiac_Dzien,
cast(year(data) as varchar(4)) as rok
from Twoja_tabela

czy mam możliwość podmiany daty na postać kolumn bazy danych.

można zrobić dynamicznego pivota w SQL-u
ale są inne bardziej cywilizowane metody np. Report Server i kontrolka Matrix
Grzegorz K.

Grzegorz K. Data & Analytics
Engineer

Temat: SQL - zapytanie sprzedaz - według innego kalendaża

jeśli faktycznie chodzi o prezentowanie wielkości (np. sprzedaży) w kolumnach reprezentujących poszczególne daty (okresy) to rzeczywiście PIVOT (jak okresy mają się automatycznie dodawać to w dynamicznym SQL ).
Jeśli jednak dane na końcu zrzucane są do Excela, to czy nie lepiej jest wrzucić dane do tabeli przestawnej po stronie Excela ? Z reguły powinno być bardziej elastyczne rozwiązanie dla użytkownika pliku , który może sam edytować tabelę przestawną. Budowanie Pivota po stronie bazy narzuca jeden sposób agregacji.
No, ale może sytuacja jednak tego wymaga takiego posunięcia :)

Następna dyskusja:

Zapytanie w SQL




Wyślij zaproszenie do