【问题标题】:How to query for getting value from either Table A or B?如何查询从表 A 或 B 中获取值?
【发布时间】:2015-09-09 04:06:30
【问题描述】:

这是我需要在屏幕上显示的 Datagridview。
(数据网格视图与“主表”(RECEIVE_PLAN)绑定)

概念设计数据库:

如果你想进口一些东西到仓库,你必须计划在一天内收货。 接收计划直接从“采购订单”制定 有时您的仓库在订购前有收货计划。

数据库共有三个表,包括表A表B主表

他们有这样的关系。

注意:主表有两个选项用于获取显示到屏幕的值

  1. 直接从A表(PURCHASE ORDER表)获取"PO_LIST_NO""PO_NO"

  2. B表(RECEIVE SCHEDULE表)获取“PO_LIST_NO”“PO_NO”,然后从A表中获取值。

重要条件

  1. 在主表 (RECEIVE PLAN) 中必须在“PO_ID”或“RS_ID”中有一个值

  2. 如果主表(RECEIVE PLAN)在 PO_ID 列有值,则 RS_ID 列必须为 NULL。 另一方面,如果主表 (RECEIVE PLAN) 的值为 RS_ID 列,PO_ID 列必须为 NULL

  3. 主表(接收计划)不能同时为 PO_ID 和 RS_ID 为空

  4. 主表(接收计划)不能在 PO_ID 和 RS_ID 处都有值

如下所示接收计划的示例。

(PO_TRAN_ID) 是 PO_ID

(RS_TRAN_ID) 在这种情况下是 RS_ID。

问题:如何查询从表 A 或 B 中获取值?

如何在 主表AB 表 之间加入这样的显示。

这个datagridview的属性。

BindingSource:主表(RECEIVE_PLAN)

“PO LIST NO”列:从 A 表中获取 (PURCHASE_ORDER)

“PO NO”列:从 A 表中获取 (PURCHASE_ORDER)

“计划数量”列:从主表获取(接收计划)

【问题讨论】:

  • 我很欣赏可视化图表和努力,但我认为您的问题会更清楚,只需以纯文本形式输入和输出示例。
  • @ThanapipatPacharatanakoson,请使用纯文本而不是图像。更好的是,发布一个创建表脚本和插入语句。
  • +1 来自我。我实际上非常喜欢这些图像。它对可视化事物有很大帮助。当然是对文字描述的补充(为了复制粘贴)

标签: sql sql-server database purchase-order


【解决方案1】:

这样的?

SELECT A_TABLE.PO_LIST_NO, A_TABLE.PO_NO, SUM(MAIN_TABLE.PLAN_QTY) FROM A_TABLE
INNER JOIN B_TABLE ON A_TABLE.PO_ID = B_TABLE.PO_ID
INNER JOIN MAIN_TABLE ON MAIN_TABLE.PO_ID = B_TABLE.PO_ID OR MAIN_TABLE.RS_ID = B_TABLE.RS_ID
WHERE (MAIN_TABLE.RS_ID IS NOT NULL OR MAIN_TABLE.PO_ID IS NOT NULL) AND NOT (MAIN_TABLE.RS_ID IS NOT NULL AND MAIN_TABLE.PO_ID IS NOT NULL) 
GROUP BY A_TABLE.PO_LIST_NO, A_TABLE.PO_NO

【讨论】:

    【解决方案2】:

    我可以使用这个查询来解决它。

    ( SELECT   MAIN_TABLE.*,   A_TABLE.PO_LIST_NO, A_TABLE.PO_NO
      FROM          MAIN_TABLE  
                    LEFT OUTER JOIN A_TABLE
                    ON MAIN_TABLE.PO_ID = A_TABLE.TRAN_ID
      WHERE  (MAIN_TABLE.RS_ID IS NULL) 
    )  
    
      UNION 
    
    
    ( SELECT     MAIN_TABLE.*   , A_TABLE.PO_LIST_NO , A_TABLE.PO_NO
      FROM          MAIN_TABLE  
                    LEFT OUTER JOIN B_TABLE 
                    ON MAIN_TABLE.RS_ID = B_TABLE .TRAN_ID
                                 LEFT OUTER JOIN A_TABLE  
                                 ON B_TABLE .PO_ID = A_TABLE.TRAN_ID
      WHERE      (MAIN_TABLE.PO_ID IS NULL)  
     )  
    

    【讨论】:

    • 你是个天才!简单有效的解决方案!
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2011-06-25
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多