0

私はこれを理解できると思っていましたが、多くの問題を抱えています.3つのテーブル、、、がTable1ありTable2ますTable3。これらのテーブルは他の誰かによって設計されたもので、私はそれらを使用する必要があります。それらは、今日使用されている方法で使用されるようには設計されていません。

肝心なのは、 を入力できるようにする必要があるということです。Item_Noこれは常に に存在しTable2ます。また、 にも が見つかる場合、複数回またはまったく見つからない可能性があり、 では 5 回、 では3 回しか見つからない場合があります。にある場合は、にも含まれます。Item_NoTable 3Table2Table3Table3Table1

したがって、Table2 で見つけることができる Item_No を使用して、それらの行に関連付けられている Order_qty を返します。次に、存在する場合を使用して、 Table1.IDどこにTable1.ID = Table3.IDWHEREを取得しますTable3.Item_No = Table2.Item_No

私は次のことを思いつきました。エラーは発生しませんが、C#の塗りつぶし中にコードの実行を停止するだけです。私はそれを見つけて見つけたものItem_NoTable3返すためにそれを機能させました。それ以来、このコード行のみを変更したので、これが問題であることを知っています。

これが私が思いついたもので、機能していません:

SELECT Table1.ID, 
       Table2.Order_Qty As [Qty of Full Order], Table2.Item_No As [Set No] 
FROM Table2 
LEFT JOIN Table3 
       ON  Table2.Item_No = Table3.Item_No 
           AND Table2.Order_No = Table3.Order_No
LEFT JOIN Table1 
       ON Table1.Order_No = Table2.Order_No 
          AND Table1.ID = Table3.ID 
WHERE Table2.Item_No = @m_strUserEnteredSeachValue
ORDER BY Table2.Order_No DESC

*データ例: *

表1

+----------+--------------+-------------------+
| Order_No | Sub_Order_No | Sub_Order_Contact |
+==========+==============+===================+
|    1     |      1       |     John Doe      |
+----------+--------------+-------------------+
|    1     |      2       |     Jane Doe      |
+----------+--------------+-------------------+
|    1     |      3       |        Foo        |
+----------+--------------+-------------------+
|    1     |      4       |        Bar        |
+----------+--------------+-------------------+
|    1     |      5       |        Foo2       |
+----------+--------------+-------------------+

表 2

+----------+--------------+-------------------+
| Order_No |    Item_No   | Customer_Item_Name|
+==========+==============+===================+
|    1     |      1       |   1234567890      |
+----------+--------------+-------------------+
|    1     |      2       |   1234567891      |
+----------+--------------+-------------------+
|    1     |      3       |   1234567892      |
+----------+--------------+-------------------+
|    1     |      4       |   1234567893      |
+----------+--------------+-------------------+
|    1     |      5       |   1234567894      |
+----------+--------------+-------------------+
|    1     |      6       |   1234567895      |
+----------+--------------+-------------------+
|    2     |      1       |    0987654321     |
+----------+--------------+-------------------+
|    2     |      2       |    0987654322     |
+----------+--------------+-------------------+
|    2     |      3       |    0987654323     |
+----------+--------------+-------------------+
|    3     |      1       |    1234567893     |
+----------+--------------+-------------------+

そして表3

+----------+--------------+-------------------+--------------+
| Order_No |    Item_No   | Customer_Item_Name| Sub_Order_No |
+==========+==============+===================+==============+
|    1     |      1       |   1234567890      |       1      |
+----------+--------------+-------------------+--------------+
|    1     |      2       |   1234567891      |       2      |
+----------+--------------+-------------------+--------------+
|    1     |      3       |   1234567892      |       2      |
+----------+--------------+-------------------+--------------+
|    1     |      4       |   1234567893      |       3      |
+----------+--------------+-------------------+--------------+
|    1     |      5       |   1234567894      |       4      |
+----------+--------------+-------------------+--------------+
|    1     |      6       |   1234567895      |       4      |
+----------+--------------+-------------------+--------------+
|    1     |      4       |   1234567893      |       4      |
+----------+--------------+-------------------+--------------+

探している結果: アイテム 1234567893 を検索した場合

+----------+--------------+-------------------+--------------+-------------------+
| Order_No |    Item_No   | Customer_Item_Name| Sub_Order_No | Sub_Order_Contact |
+==========+==============+===================+==============+===================+
|    3     |      1       |   1234567893      |              |                   |
+----------+--------------+-------------------+--------------+-------------------+
|    1     |      4       |   1234567893      |      3       |       Foo         |
+----------+--------------+-------------------+--------------+-------------------+
|    1     |      4       |   1234567893      |      4       |       Bar         |
+----------+--------------+-------------------+--------------+-------------------+
4

2 に答える 2

0

これを試して:

declare @m_strUserEnteredSeachValue varchar(10) = '1234567893';
with a as
(
  select 
    Order_No, Item_No, Customer_Item_Name 
  from 
    Table2
  UNION 
  select 
    Order_No, Item_No, Customer_Item_Name 
  from 
    Table3
)
select 
  a.Order_No, 
  a.Item_No, 
  a.Customer_Item_Name,
  Table3.Sub_Order_No, 
  Table1.Sub_Order_Contact 
from 
  a
left join 
  Table3 
on 
  Table3.Order_No=a.Order_No 
  and Table3.Item_No=a.Item_No 
  and Table3.Customer_Item_Name=a.Customer_Item_Name
left join 
  Table1 
on
  Table1.Sub_Order_No = Table3.Sub_Order_No
where 
  @m_strUserEnteredSeachValue = a.Customer_Item_Name
order by 
  a.Item_No, Table3.Sub_Order_No

SqlFiddle デモ: http://www.sqlfiddle.com/#!3/973d8/3

あなたの質問から理解するのが難しいので、これがあなたが到達しようとしているものであるかどうかはわかりません. このクエリは、OP に入れたデータセットを提供することを知っています。

于 2013-04-29T23:49:48.437 に答える
0

このような問題に対する実際的な答えは、いくつかのクエリに分割することです。最初にテーブル #2 をクエリし、次にその結果セットに基づいて、追加のクエリを #1 または #3 に対して実行します。

もう 1 つの角度は、テーブル #2 に対してクエリを実行し、サブクエリを使用してテーブル #1 またはテーブル #3 にアクセスし、必要なデータをフェッチすることです。

于 2013-04-29T20:00:22.790 に答える