Desidero essere in grado di unire due tabelle interne in base al risultato di un'espressione.Join interno condizionale
Quello che ho cercato finora:
INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
ON
RReg.RegistreringsId = R.Id
regt è un join che ho fatto poco prima di questo si uniscono:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
Questo SQL-script non funziona.
Quindi, tutto sommato, se la Type
è 1, allora dovrebbe unirsi sul tavolo TimeRegistration
altrimenti dovrebbe unirsi su DrivingRegistration
.
Soluzione:
Nella mia dichiarazione select ho svolto le seguenti giunzioni:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 1
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type <>1
Poi ho modificato il mio where-clause
per produrre il corretto, a seconda del RegType
, in questo modo:
WHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id)
Non puoi farlo così! 'CASE' non può essere utilizzato per scambiare dinamicamente parti interne ed esterne della query. Queste tabelle hanno le stesse strutture? –
Hai ricevuto un errore? Se è così, che cosa è? – AndrewC