Poniższy obraz jest częścią widoków systemu Microsoft SQL Server 2008 R2. Z obrazu widać, że zależność między sys.partitions
i sys.allocation_units
zależy od wartości sys.allocation_units.type
. Aby połączyć je razem, napisałbym coś podobnego do tego:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
Ale górny kod daje błąd składni. Myślę, że to z powodu CASE
oświadczenia. Czy ktoś może pomóc trochę wyjaśnić?
Dodaj komunikat o błędzie:
Msg 102, poziom 15, stan 1, wiersz 6 Niepoprawna składnia w pobliżu znaku „=”.
sql
sql-server
join
case
Po prostu uczący się
źródło
źródło
Odpowiedzi:
CASE
Wyrażenie zwraca wartość zTHEN
części punktu. Możesz go użyć w ten sposób:Zauważ, że musisz coś zrobić ze zwróconą wartością, np. Porównać ją z 1. Twoja instrukcja próbowała zwrócić wartość przypisania lub testu na równość, z których żadne nie ma sensu w kontekście klauzuli
CASE
/THEN
. (GdybyBOOLEAN
był to typ danych, test równości miałby sens).źródło
= 1
na= 0
, ale nie sądzę, że spodoba ci się wynik.Proponuję przejść przez ten link Łączenia warunkowe w SQL Server i instrukcja T-SQL Case w klauzuli JOIN ON
na przykład
Edycja: zgodnie z komentarzami.
źródło
conditional join
znaczy Każde sprzężenie (z wyłączeniem krzyża) jest warunkowe. Czym ten przypadek różni się od innych? Twoja próbka ma sprzężenie wewnętrzne z warunkiem, a zapytanie OPs ma sprzężenie z warunkiem.OR
?OR
”. UżywanieOR
jest tylko jednym ze sposobów jego implementacji.OR
i 2ANDs
lub z 1CASE
. Jest to rutynowe zapytanie, które nie różni się niczym od innych.Spróbuj tego:
źródło
Myślę, że potrzebujesz dwóch przypadków:
To dlatego, że:
źródło
Wziąłem twój przykład i zredagowałem go:
źródło
Wydaje się to miłe
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
źródło
Tak, możesz. Oto przykład.
źródło
Wziął przykład DonkeyKonga.
Problem polega na tym, że muszę użyć zadeklarowanej zmiennej. Pozwala to na określenie lewej i prawej strony tego, co chcesz porównać. Służy to do obsługi raportu SSRS, w którym różne pola muszą być połączone na podstawie wyboru dokonanego przez użytkownika.
Początkowy przypadek ustawia wybór pola na podstawie wyboru, a następnie mogę ustawić pole, które muszę dopasować do sprzężenia.
Drugie stwierdzenie przypadku można dodać po prawej stronie, jeśli zmienna ma wybierać spośród różnych pól
źródło
Tutaj porównałem różnicę w dwóch różnych zestawach wyników:
źródło