【问题标题】:SQL query for joining five tables with conditions用条件连接五张表的 SQL 查询
【发布时间】:2016-01-16 00:31:01
【问题描述】:

我有 5 个表格,如下所示:

Serial_Number|Product_ID|Mfg_ID|Distribution_Type
AG0026       | CKJUT    |UGXT03|A
BX3234       | NPLPT    |UXXP32|B
LP3269       | KNGTP    |AKML63|A
.....         .....      ...    ..

产品详情2:

Serial_Number|Product_Type|Unit
NG2164       |S           |10
LT4598       |L           |13
BX3234       |L           |21

制造商:

SLNO|Product_Code|Mfg_Code
1   |T03         |T03
2   |L63         |L63
3   |BXT         |null

制造细节1:

mfg_code|Mfg_Name
T03         | xy.pvt.ltd
L63         | LP.pvt.ltd

制造细节2:

Sel_ID|Mfg_Name
UXXP32|ab.pvt.ltd
NTLP25|cd.pvt.ltd

现在我需要在需要以下列的地方生成报告

  1. 序列号
  2. Product_ID
  3. 产品类型为 L 的 Mfd_ID
  4. Mfg_Name,其中产品类型为 L
  5. 产品类型为 L 的单位

条件:

  1. MfgDetails1 的 Product_code= ProductDetails1 的 Mfg_ID 的最后 3 位
  2. MfgDetails2 的 Sel_ID= ProductDetails1 的 Mfg_ID
  3. 如果 distribution_type = 'A',则用于制造细节。您需要获取 ProductDetails1 的 mfg_ID 的最后 3 个字符,在 mfgacct 上将其作为 product_code 查找 mfg_code,然后使用该 mfg_code 访问 mfg_name 的 MfgDetails1。
  4. 如果 distribution_type = 'B',则获取制造商详细信息。您需要获取 ProductDetails1 的完整 mfg_ID,并将其作为 MfgDetails2 上的 Sel_ID 查找。

所以我的查询:

SELECT 
    pd1.serial_number AS 'Serial Number',Pd1.product_ID AS 'Product ID', 
    pd1.mfg_id,
    CASE WHEN pd1.distribution_type='A' THEN md1.Mfg_Name 
         ELSE md2.Mfg_Name 
    END AS 'MFG Name',
    pd1.distribution_type,
    pd2.unit
FROM   
    ProductDetails1 pd1 
JOIN 
    ProductDetails2 pd2 ON pd1.serial_number = pd2.serial_number 
JOIN   
    Mfgaccnt ON Mfgaccnt.Product_Code = Right(Pd1.Mfg_ID,3)
JOIN  
    MfgDetails1 ON Md1.Mfg_Code = Mfgaccnt.Product_Code
LEFT JOIN 
    MfgDetails2 md2 ON pd1.mfg_Id = md2.sel_ID
WHERE
    pd2.product_type = 'L'

但是 Result 没有返回任何 B 分布类型的产品。请帮帮我

【问题讨论】:

  • 我无法格式化。请帮忙。
  • 欢迎来到 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上(或将行缩进至少 4 个字符!)以很好地格式化和语法突出显示它!

标签: sql-server sql-server-2008 join left-join inner-join


【解决方案1】:

这不是问题吗:

  • 如果 distribution_type = 'A',则用于制造细节。你需要 取 ProductDetails1 的 mfg_ID 的最后 3 个字符,查一下 作为 mfgacct 上的 product_code 来查找 mfg_code,然后使用它 mfg_code 以访问 mfg_name 的 MfgDetails1。

在您的 SQL 中,您也在为其他分发类型执行此操作:

JOIN   
    Mfgaccnt ON Mfgaccnt.Product_Code = Right(Pd1.Mfg_ID,3)

由于这不是左外连接,它将过滤掉所有没有以这种方式匹配的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-08
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多