Если вы хотите «минимум» типа аренды, вы можете использовать apply
:
SELECT . . .
FROM Customer c JOIN
Lease lt
ON lt.CustomerId = c.CustomerId AND
lt.LeaseType = 'T' JOIN
Lease lp
ON lp.CustomerId = c.CustomerId AND
lp.LeaseType = 'P' JOIN
Lease lu
ON lu.CustomerId = c.CustomerId AND
lu.LeaseType = 'U' CROSS APPLY
(SELECT MIN(v.LeaseType) as LeaseType
FROM (VALUES (lt.LeaseType), (lp.LeaseType), (lu.LeaseType)
) v(LeaseType)
Это отвечает на вопрос, который вы задали. Я сомневаюсь, что он делает что-нибудь полезное, потому что он всегда будет возвращать 'P'. Зачем? Все JOIN
являются внутренними соединениями, поэтому они требуют совпадения. LeaseType
используется в условии JOIN
, поэтому требуется соответствие. Это соответствует только клиентам, у которых есть все три.
Я могу предположить, что вы могли бы хотеть внешних объединений. Однако вместо того, чтобы спекулировать, вам лучше задать другой вопрос с примерами данных, желаемыми результатами и объяснением того, чего вы действительно хотите достичь.