2013-09-23 3 views
0

У меня есть специальное требование, когда у меня есть две таблицы, как указано ниже: Material Details и Specification Details. Что мне нужно сделать, это разделить значение столбца Sp_Code, используя «-» (дефис). А затем найдите Material_ValueSp_Code в таблице Material_Details.Использование функции coalesce в SQL Query

Например:

Если я разделил "CHA-Rez" с помощью "-", то у меня есть два значения, "CHA" и "резь". Теперь я должен найти Material_Value для СНА в Material_Details таблице:

  • Если значение СНА нет в Material_Code колонке material_Details таблицы, то мне нужно искать для значения рези в Material_Code колонке Material_Details таблицы.
  • Если оба не найдены, мне нужно отобразить его как пустое.

Приведенную ниже таблицу можно найти здесь. Любая помощь будет оценена.

Material_Details        Specification_Details  
Material_Code Material_Value      Sp_Code  Value 
ABC    Ammeter       CHA-REZ  1 
TAB    Table        PAP-CHA  2 
CHA    Chair        TAB-BBV  3 
PAP    Paper        CNN-ASD  4 
+1

так что вы выбрали тег 'SQL',' split' и 'coalesce' - вы знаете, что вам нужно делать, ищете ли вы кого-нибудь, чтобы написать SQL для вас? – bhs

ответ

1

Используйте подзапрос вывести «внешние ключи», а затем LEFT JOINMaterial_Detail таблицы на подзапрос дважды и COALESCE столбцов требуются от Material_Detail таблиц

SELECT *, COALESCE(md1.Material_Value, md2.Material_Value, '') Material_Value 
FROM (
    SELECT *, 
     SUBSTRING(Sp_Code, 1, CHARINDEX('-', Sp_Code, 1)-1) FK1, 
     SUBSTRING(Sp_Code, CHARINDEX('-', Sp_Code, 1)+1, LEN(Sp_Code)-1) FK2 
    FROM Specification_Details 
) spec 
LEFT JOIN Material_Details md1 ON spec.FK1 = md1.Material_Code 
LEFT JOIN Material_Details md2 ON spec.FK2 = md2.Material_Code 
Смежные вопросы