SQL: Czy da się?

0

Hej
jestem nowy więc z góry prosze o wyrozumiałość.
Mam takie sql składający się z kilkunastu unionów:

Select (case when nr = 1 then 'coś' else 'costam' end) as nazwa, kwota
from tabela
where id = 1

union all

Select (case when nr = 1 then 'coś' else 'costam' end) as nazwa, kwota
from tabela
where id = 4

uniin all

Select (case when nr = 1 then 'coś' else 'costam' end) as nazwa, kwota
from tabela
where id = 7

itd....

Definicja kolumny nazwa wiem już teraz że może ulegać zmianie więc chciałbym uniknąć konieczności zmiany tej kolumny w każdym zapytaniu z osobna.
Czy można jakoś na początku zadeklarować definicję tej kolumny a w zapytaniach użyć jej jako zmiennej?

1

Nie da się. No chyba że zrobisz SQLa jak tekst, a potem odpalisz go jakimś EXECUTE IMMEDIATE (równie w zależności od bazy )

2

Źródło i definicja kolumny nazwa dla każdego zapytania jest zawsze tym samym?
Jeżeli tak to zamiast unionów w warunku wstaw id IN (1,2,3,[...]).

1

Może ci ułatwi fakt, że wystarczy tylko pierwsze zapytanie uniii oznaczyć aliasami, pozostałe nie są konieczne:

select 1 as kol1 , 2 as kol2 union all
select 2, 2 union all
select 3, 3 union all
select 4, 4 

co więcej, kolejne zapytania jeżeli bedą miały inne aliasy to nic nie szkodzi :) całość przyjmie nazewnictwo aliasow z pierwszego o zapytania:

select 1 as kol1 , 2 as kol2 union all
select 2 as ela, 2 as ula union all
select 3, 3 union all
select 4, 4 
0

Teoretycznie bardzo pokracznie i na okrętkę mógłbyś zrobić taką "zmienną" dla kolumny.
Moim zdaniem wygląda to trochę brzydko i zakłada, że wszystkie "zmienne" kolumny będą takiego samego typu. Oraz dla wygody pewnie trzeba by to było rozbić na dwa zapytanie.

declare @mycolumn varchar(25) = 'Col1';

SELECT 
case @mycolumn 
 when 'Col1' then Col1
 when 'Col2' then Col2
 when 'Col3' then Col3 
end as MyColumn,
,*
into #myTable
 FROM myTable

W kolejnym niżej zapytaniu kwerendujesz ''#myTable' gdzie odwołujesz się do 'myColumn' która została wyprodukowana prez 'Case' na podstawie zmiennej. Wywali się jeśli typy kolumn w 'Case' będą różne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1