4

データベースに 2 つのテーブルがあり、1 つは 用In、もう 1 つは 用Outです。と の 2 つの列がQuantityありPriceます。正しい価格を選択する SQL クエリを作成するにはどうすればよいですか?

例: 75 で 3 つのアイテムがあり、次に 80 で 3 つのアイテム入っているとします。次に、75 で 2 つのアイテムがあり、3目は 75 (X) で、4目は 80 (Y) である必要があります。

X と Y の価格クエリを作成するにはどうすればよいですか? 3 行目と 4 行目の価格を使用する必要があります。たとえば、テーブルの 3 行目を選択する方法はありますInか? テーブルには他のアイテムの投稿も含まれるため、auto_increment を「3 番目」の行の識別子として使用することはできません。行は削除されず、説明責任のために保存されます。

SELECT Price FROM In WHERE ...?

新しいデータベース設計:

+----+
| In |
+----+------+-------+
| Supply_ID | Price |
+-----------+-------+
|     1     |  75   |
|     1     |  75   |
|     1     |  75   |
|     2     |  80   |
|     2     |  80   |
+-----------+-------+
+-----+
| Out |
+-----+-------+-------+
| Delivery_ID | Price |
+-------------+-------+
|      1      |  75   |
|      1      |  75   |
|      2      |   X   | <- ?
|      3      |   Y   | <- ?
+-------------+-------+

古いデータベース設計:

+----+
| In |
+----+------+----------+-------+
| Supply_ID | Quantity | Price |
+-----------+----------+-------+
|     1     |  3       |  75   |
|     2     |  3       |  80   |
+-----------+----------+-------+

+-----+
| Out |
+-----+-------+----------+-------+
| Delivery_ID | Quantity | Price |
+-------------+----------+-------+
|      1      |  2       |  75   |
|      2      |  1       |   X   | <- ?
|      3      |  1       |   Y   | <- ?
+-------------+----------+-------+
4

2 に答える 2

5

コメントを読んで、各行の適切な位置を知るために自動インクリメントまたは日付フィールドを追加しても構わないと言っています。これを追加したら、処理済みと呼ばれる In テーブルにもう 1 行追加することをお勧めします。これは、行がテーブルに追加されると自動的に false に設定されます。OUT にコピーされたすべての行は、すでに処理済みフィールドが true に設定されています。

+----+
| In |
+-----------+-----------+-------+-----------+
| AUtoId    | Supply_ID | Price | Processed |
+-----------+-----------+-------+-----------+
|     1     |     1     |  75   |     1     |
|     2     |     1     |  75   |     1     |
|     3     |     1     |  75   |     0     |
|     4     |     2     |  80   |     0     |
|     5     |     2     |  80   |     0     |
+-----------+-----------+-------+---------- +

次に、OUTに移動する次のアイテムを見つけるには、次のことができます

SELECT TOP 1 Supply_ID, Price 
FROM In WHERE Processed = 0
ORDER BY [Your Auto Increment Field or Date]

行が OUT に移動したら、その行の処理済みフィールドを true に UPDATE します。

于 2010-06-09T12:27:27.387 に答える
0

ここで役立つ簡単なクエリが見つかりません。SQL で FIFO をシミュレートするには、OPERATION、OUT、および FIFO の 3 つのテーブルを調べます。OPERATION は実質的にトランザクションのログであり、FIFO テーブルは FIFO 状態であり、OUT は FIFO からの応答です。

CURRENT を操作 (アイテムの追加と削除) で更新し、それらが OPERATION テーブルに入力され、アイテムの要求を OUT テーブルに処理し、FIFO の値を減らし、必要に応じて FIFO テーブルからレコードを削除します。

それでも、最初のレコードをクエリして、各操作に十分な量があるかどうかを確認し、そのレコードを適切に更新し、操作ができない追加のレコードをクエリする必要があるため、すべてを処理するための単純なクエリは表示されません。満たされました。私のレベルの SQL 能力では、それに対する単純な解決策を導き出すことはできません。それは私にとってビジネス ロジックを構成し、その層に引き上げられます。

于 2010-06-09T12:10:54.663 に答える