Wieloktrotne użycie wyniku CASE

Wieloktrotne użycie wyniku CASE
HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1863
0

Witam.

Czy da się kilka razy użyć tego co zwróci CASE ?
Np mam taką funkcję:

Kopiuj
CREATE FUNCTION Cennik
(
    @poziomceny int,
    @kontrahent int
)
RETURNS TABLE 
AS
RETURN 
(
SELECT id,  nazwa, Grupa, vat,
        CASE @poziomceny 
        WHEN 1 THEN Netto1 
        WHEN 2 THEN Netto2 
        WHEN 3 THEN Netto3 
        WHEN 4 THEN Netto4 
        WHEN 5 THEN Netto5 
        WHEN 6 THEN Netto6 
        WHEN 7 THEN Netto7 
        WHEN 8 THEN Netto8 
        WHEN 9 THEN Netto9 
        WHEN 10 THEN Netto10
        END [CenaPodstawowa], 
        rabat [Rabat]  -- tu chciałbym kolejny raz użyć tego co zwrócił CASE z @poziomcen , żeby np obliczyć cenę brutto czy cenę po rabacie      
FROM towary
) 

Z góry dziękuję :)

  • Rejestracja: dni
  • Ostatnio: dni
1

podzapytaniem

coś w stylu

Kopiuj
SELECT id,  nazwa, Grupa, vat, CenaPodstawowa, CenaPodstawowa + vat as Brutto, rabat
   FROM (
      SELECT id, nazwa, Grupa, vat, rabat
        CASE @poziomceny 
        WHEN 1 THEN Netto1 
        WHEN 2 THEN Netto2 
        WHEN 3 THEN Netto3 
        WHEN 4 THEN Netto4 
        WHEN 5 THEN Netto5 
        WHEN 6 THEN Netto6 
        WHEN 7 THEN Netto7 
        WHEN 8 THEN Netto8 
        WHEN 9 THEN Netto9 
        WHEN 10 THEN Netto10
        END [CenaPodstawowa], 
        rabat [Rabat]  -- tu chciałbym kolejny raz użyć tego co zwrócił CASE z @poziomcen , żeby np obliczyć cenę brutto czy cenę po rabacie      
FROM towary) x
  • Rejestracja: dni
  • Ostatnio: dni
0

swoją drogą wygląda to na źle przemyślaną strukturę bazy - poziomy cen raczej powinny być w osobnej tabeli i powinno się tylko do nich joinować - wtedy tego problemu w ogóle by nie było a poziomów mogłaby być dowolna ilość bez mnożenia kolumn

HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1863
0

W rzeczywistości struktura wygląda trochę inaczej, chciałem tylko pokazać o co mi chodzi.
Szczerze mówiąc pierwszy raz widzę żeby w FROM używać podzapytania, więc zaraz pokombinuje jak miało by to działać.

LD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 115
0

Możesz użyć też CTE.

HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1863
0

Sposób z podzapytaniem działa.
Problem rozwiązany a przy okazji nauczyłem się czegoś ciekawego :).

Dziękuję i życzę miłego dnia :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.