0

我有一个特定的要求,我有两个表,如下所述:Material DetailsSpecification Details. 我要做的是Sp_Code使用“-”(连字符)拆分列值。然后找到in表Material_Value的。Sp_CodeMaterial_Details

例如:

如果我使用“-”拆分“CHA-REZ”,那么我有两个值,“CHA”和“REZ”。现在我必须在 Material_Details 表中找到 CHA 的 Material_Value:

  • 如果 CHA 的值不存在于 material_Details 表的 Material_Code 列中,那么我需要在 Material_Details 表的 Material_Code 列中搜索 REZ 的值。
  • 如果两者都没有找到,我需要将其显示为空白。

请查找下表以供参考。任何帮助将不胜感激。

    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
4

1 回答 1

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
于 2013-09-23T13:28:20.503 回答