1

Temat: Jak podać zmienną kolumnę w zapytaniu

mam kolumny dzien_01, dzien_02 itd do dzien_31 jak teraz w zapytaniu zrobić coś takiego żeby wyciągnąć dzień np 20 i w zapytaniu select wybrać kolumnę dzien_20

czyli

select
  to_char(date_part('day', t.data_transakcji), 'dzien_99')
from
dni
where
data_transakcji = last_day(t1.data_transakcji)
 

jak wpisać aby traktował "to_char(date_part('day', t.data_transakcji), 'dzien99')" jako tabelę a nie wynik bo obecnie wpisuje mi  dzien_15 zamiast odwołać się do wartości tabeli dzien_15

próbowałem używać  cudzysłowów, apostrofów i nic.  Jak zrobić żeby on traktował to jako nazwę kolumny??

Ostatnio edytowany przez sirkonsul (2013-01-14 12:58:35)

2

Odp: Jak podać zmienną kolumnę w zapytaniu

Twoje podejście do funkcji to_char jest trochę zbyt optymistyczne. Masz dwie możliwości wykorzystać funkcje EXECUTE ale będziesz musiał napisać funkcje, która będzie ją wykorzystywała lub na podstawie  nr dnia wybrać odpowiednią kolumnę, ponieważ wykorzystujesz funkcje last_day (zakładam, że ma ona działać jak w oraclu) to tak naprawdę powinieneś wybrać tylko dni od 28 do 31.
W poniższym przykładzie zrobiłem pełną wersję, tyle że zastąpiłem funkcje last_day i oczywiście zasymulowałem sobie tabelę dni, ma nadzieję, że dobrze odczytałem twoje intencje.

select
  data_transakcji,
  date_part('day', data_transakcji)::int as dzien,
  case date_part('day', data_transakcji)::int
  when 01 then dzien_01 when 02 then dzien_02 when 03 then dzien_03 when 04 then dzien_04 when 05 then dzien_05
  when 06 then dzien_06 when 07 then dzien_07 when 08 then dzien_08 when 09 then dzien_09 when 10 then dzien_10
  when 11 then dzien_11 when 12 then dzien_12 when 13 then dzien_13 when 14 then dzien_14 when 15 then dzien_15
  when 16 then dzien_16 when 17 then dzien_17 when 18 then dzien_18 when 19 then dzien_19 when 20 then dzien_20
  when 21 then dzien_21 when 22 then dzien_22 when 23 then dzien_23 when 24 then dzien_24 when 25 then dzien_25
  when 26 then dzien_26 when 27 then dzien_27 when 28 then dzien_28 when 29 then dzien_29 when 30 then dzien_30
  else dzien_31 end as wynik
from
(
select data_transakcji::date
,01 as dzien_01,02 as dzien_02,03 as dzien_03,04 as dzien_04,05 as dzien_05,06 as dzien_06,07 as dzien_07,08 as dzien_08,09 as dzien_09,10 as dzien_10
,11 as dzien_11,12 as dzien_12,13 as dzien_13,14 as dzien_14,15 as dzien_15,16 as dzien_16,17 as dzien_17,18 as dzien_18,19 as dzien_19,20 as dzien_20
,21 as dzien_21,22 as dzien_22,23 as dzien_23,24 as dzien_24,25 as dzien_25,26 as dzien_26,27 as dzien_27,28 as dzien_28,29 as dzien_29,30 as dzien_30
,31 as dzien_31 from generate_series (current_date - interval '95 day',current_date,interval '1 day') data_transakcji
) dni
where
data_transakcji = date_trunc('month',data_transakcji) + interval '1 month' - interval '1 day';

Ostatnio edytowany przez c_michal (2013-01-14 23:24:27)

3

Odp: Jak podać zmienną kolumnę w zapytaniu

Wielkie dzięki zapytanie sobie zrobiłem jak tylko spojrzałem że można przecież w casie wpisać i po problemie. Execute nie chciałem używać bo to tworzy dodatkową robotę a poza tym nie robiłem tego wcześniej a to serwer produkcyjny więc nie chce się bawić.

W każdym razie wielkie dzięki.