я знаю, что это не рекомендуемый способ join
таблиц.Но это относится только к одному редко используемому отчету для одного человека, и я не хочу менять для него свою модель данных.
У меня есть две таблицы Model
и SparePart
, которые не связаны напрямую друг с другомчерез внешние ключи.
Model SparePart
idModel idSparePart
ModelName SparePartDescription
Price
В особых случаях модель также является запасной частью (обменной единицей).Тогда мне нужна цена для этой модели из таблицы SparePart
через столбец SparePartDescription
.
Например:
ModelName = C510
SparePartDescription = C510/Exchange Unit/Exch unit/Red
Поэтому я пытаюсь объединить обе таблицы, чтобы получить ценусо следующим SQL:
SELECT m.idModel, m.ModelName, sp.Price, sp.SparePartDescription
FROM modModel AS m INNER JOIN
tabSparePart AS sp ON m.ModelName =
(SELECT TOP 1 LEFT(sp.SparePartDescription, CHARINDEX('/', sp.SparePartDescription) - 1)order by price desc)
WHERE (CHARINDEX('/', sp.SparePartDescription) > 0)
AND (sp.fiSparePartCategory = 6)
ORDER BY m.ModelName, sp.SparePartDescription
Но я получаю несколько записей для одной модели:
idModel ModelName Price SparePartDescription
569 C510 70,75 C510/Exchange Unit/Exch unit/Red
569 C510 70,75 C510/Exchange Unit/Latin/Generic/Black
569 C510 70,75 C510/Exchange Unit/Latin/Generic/Silver
433 C702 80,72 C702/Exchange Unit/Latin/Generic/Black
433 C702 NULL C702/Exchange Unit/Latin/Generic/Cyan
433 C702 80,72 C702/Exchange Unit/Orange Global/Black
Я хочу выбрать только одну запись, если есть несколько запасных частей с совпадающим SparePartDescription.