konto usunięte

Temat: Wartość zmiennej jako nazwa kolumny w zapytaniu SQL

Witam!

Mam pytanie. Mam do zrobienia prosty raport, w którym będę zwracał wartości pewnych danych w podziale na lata. Załatwiam to prostym selectem, np:

select

part_no as "INDEKS",
descrpition as "OPIS",
(select sum(quantity) from zapas where to_char(date, 'YYYY') like to_char(sysdate, 'YYYY')) AS xxxxxxxxx

[...]

i w miejsce xxxxxxxxx wpisać coś co zwróci mi "zapas 2015", ale chciałbym żeby to 2015 było wygenerowane przez funkcję to_char(sysdate, 'YYYY'), że za rok nie będę musiał poprawiać nazwy kolumny.

konto usunięte

Temat: Wartość zmiennej jako nazwa kolumny w zapytaniu SQL

Prepare, execute statement?
Paweł Broda

Paweł Broda Software Engineer

Temat: Wartość zmiennej jako nazwa kolumny w zapytaniu SQL

Bez dynamicznego budowania zapytań nie dasz rady tego taką metodą zrobić. A może spróbuj wykorzystać klauzulę PIVOT?
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: Wartość zmiennej jako nazwa kolumny w zapytaniu SQL

Jeżeli to MySQL to uważam, że w podzapytaniu lepiej użyć zamiast
to_char(date, 'YYYY') = to_char(sysdate, 'YYYY')
formy
year(date) = year(sysdate)
A po co pisać rok w nazwie kolumny skoro zapytanie zwraca zawsze dla bieżącego roku systemowego? Nie lepiej nazwać kolumnę np "ten_rok"?

Jeżeli jednak faktycznie dla danych z kilku lat to proponuję najpierw podliczyć quantiy z tabeli zapas z podziałem na part_no (zakładam, że tabela zapas przechowuje ilości dla różnych part_no) oraz na rok
SELECT sum(quantity) AS suma, rok, part_no FROM (
SELECT quantity, year(date), part_no AS rok FROM zapas
) AS ret GROUP BY rok, part_no
a następnie zrobić join z tabelą z informacjami typu part_no, description
SELECT x.part_no, x.description, COALESCE(s.suma, 0) AS suma, s.rok 
FROM jakas_tabela x
LEFT JOIN (
SELECT sum(quantity) AS suma, rok, part_no FROM (
SELECT quantity, year(date), part_no AS rok FROM zapas
) AS ret GROUP BY rok, part_no
) AS sumy s ON x.part_no = s.part_no
i potem tak jak pisał Paweł - odwracamy tabelę np PIVOT

Zakładam szereg pomyłek ze względu na brak znajomości struktury bazy danych :)

Temat: Wartość zmiennej jako nazwa kolumny w zapytaniu SQL

Chyba najlepiej skorzystać z dynamicznego SQL-a. Poniżej pseudokod dla SQL Servera (wystarczy podstawić dane dla konkretnej tabeli i będzie działać). Sądzę, że korzystasz z Oracle, więc musisz pobrać rok za pomocą funkcji to_char z DUAL, i coś podobnego napisać.


DECLARE
@columnName VARCHAR(50)
,@command VARCHAR(MAX)
select @columnName = 'zapas ' + CAST( YEAR( GETDATE() ) AS VARCHAR)

SET @command = ' SELECT column as ''' + @columnName + ''' from tableName'

PRINT (@command)
EXEC(@command)



Wyślij zaproszenie do