2015-09-09 87 views
4

这是Datagridview,我需要像这样在屏幕上显示。
(Datagrid的视图与“主表” 结合(RECEIVE_PLAN)如何查询从表A或B获取值?

enter image description here

概念设计数据库:

如果要导入的东西进入仓库,你必须计划在一天内接收。 收货计划直接从“采购订单”进行 有时您的仓库在订购前有收货计划。

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

他们有这样的关系。

注:主表有越来越值显示在屏幕

  1. 得到“PO_LIST_NO”“PO_NO”从一个表(采购定单表两个选项)直接。

  2. 得到“PO_LIST_NO”“PO_NO”乙表(RECEIVE调度表),然后从表中获取的值。
    enter image description here

重要条件

  1. 在主表(接收PLAN)必须以 “PO_ID” 或 “RS_ID”

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

  3. 主表(RECEIVE PLAN)必须不是NULL既PO_ID和RS_ID
  4. 主表(接收PLAN)在PO_ID和RS_ID都不能有一个值

RECEIVE PLAN的例子如下所示。

enter image description here

(PO_TRAN_ID)是PO_ID

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

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

如何将主表像这些显示器的乙表之间加入。

enter image description here

这datagridview的属性。

的BindingSource:主表(RECEIVE_PLAN)

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

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

“规划数量” 栏:从主表中获取(接收PLAN)

+1

我欣赏视觉图和努力,但我认为你的问题会更清楚,只需输入和输出纯文本输入。 –

+0

http://weblogs.sqlteam.com/jeffs/archive/2007/04/03/Conditional-Joins.aspx –

+0

@ThanapipatPacharatanakoson,请使用纯文本而不是图片。更好的是,发布一个创建表脚本并插入语句。 –

回答

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 
1

我可以通过使用此查询来解决它。

(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) 
) 
+0

你是一个天才!简单有效的解决方案! –

相关问题