Join z funkcji skalarnej i tabeli

0

Cześć, mam taki problem. Piszę funkcje tabelaryczną, która ma zwrócić jeden wektor. Pierwszym elementem jest wynik działania pewnej funkcji skalarnej, a dalej jest zbiór danych. Problem jest taki, że zbiór danych może być pusty. I jeśli jest pusty, to wtedy wynik działania funkcji skalarnej jest zwracany też jako pusty(chociaż funkcja zawsze coś zwraca), a ma być widoczny. Innymi słowy, chcę zawsze uzyskać jakiś rekord.

Najpierw zrobiłem takie zapytanie:

 
SELECT dbo.funkcja(@param) as wynik_funkcji, *
from tabela
where kolumna = 0

Jednak jeśli nie ma rekordów w tabeli, gdzie kolumna = 0, wtedy jest zwracany całkowicie pusty zbiór(a chcę, żeby był wynik funkcji i dalej nulle).

Więc dalej spróbowałem z cross joinem:

SELECT a.wynik_funkcji, tab.*
from 
(
  select dbo.funkcja(@param) as wynik_funkcji
)as a
cross join tabela tab
where tab.kolumna = 0

Niestety efekt jest ten sam.

Jak to zrobić? Przypominam, że musi to być funkcja tabelaryczna działająca na MSSQL 2005.

0

Jednak nie. COALESCE służy do czegoś trochę innego. A jeśli to jest to, to nie mogę sobie wyobrazić, jak miałbym tego użyć.

0

Jeżeli nie ma rekordów tabeli to where zawsze odrzuci wszystko możesz to rozwiazać tak:

SELECT a.wynik_funkcji, tab.*
from 
(
  select dbo.funkcja(@param) as wynik_funkcji
)as a
cross join 
(select * from tabela where kolumna = 0) tab

lub tak

SELECT a.wynik_funkcji, tab.*
from 
(
  select dbo.funkcja(@param) as wynik_funkcji
)as a
cross join 
 tabela  tab
where isnull(tabkolumna,0) = 0



0

Niestety, to też nie działa.

1

rzeczywiście nie zwróciłem uwagi na sprzężenie, użyj left joina:

SELECT a.wynik_funkcji, tab.*
FROM 
(
  SELECT dbo.funkcja(@param) AS wynik_funkcji
)AS a
LEFT JOIN 
(SELECT * FROM tabela WHERE kolumna = 0) tab on 1=1
0

OK, dzięki to jest to.

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