การวน Loop ใน Query
กระทู้เก่าบอร์ด อ.Yeadram

 1,921   4
URL.หัวข้อ / URL
การวน Loop ใน Query

รบกวนทุกท่านครับ ข้อมูลของผมเป็นลักษณะนี้

DATE           |   ITEM |   LOCATION |   QTY |   LOT | LOT_QTY
17/12/2014 |   A       |   A01            | 50      |     20 |       3
17/12/2014 |   B       |   A01            | 15      |     10 |       2

โดย LOT_QTY = QTY/LOT แล้วปัดขึ้น
ผมต้องการนำข้อมูล จาก Query นี้ มาทำให้เป็นอีก Query ดังนี้

DATE           |   ITEM |   LOCATION |   QTY |   LOT | LOT_QTY | S_QTY
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 20
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 20
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 10
17/12/2014 |   B       |   A01            | 15      |     10 |       2           |   10
17/12/2014 |   B       |   A01            | 15      |     10 |       2           |   5

โดย S_QTY = เศษส่วน QTY/LOT จากวนลูป จนครบ ของ QTY

ผมมือใหม่มาก ได้รับมอบหมายงานมาโดยจำเป็น ขอบคุณมากครับ

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R19945
หมายถึงคุณมีตารางแบบนี้

DATE          |   ITEM |   LOCATION |   QTY |   LOT |
--------------------------------------------------------------------
17/12/2014 |   A        |    A01            | 50      |      20 |
17/12/2014 |   B        |    A01            | 15      |      10 |
--------------------------------------------------------------------

- คุณคิวรี่ฟิลด์ LOT_QTY ขึ้นมาด้วยการใช้สูตร
LOT_QTY = [QTY] / [LOT] (มีเศษให้ปัดขึ้นเป็นจำนวนเต็ม)
ได้คิวรี่แบบนี้

DATE          |   ITEM |   LOCATION |   QTY |   LOT | LOT_QTY |
------------------------------------------------------------------------------------
17/12/2014 |   A        |    A01            | 50      |      20 |        3        |
17/12/2014 |   B        |    A01            | 15      |      10 |        2        |
------------------------------------------------------------------------------------

- แล้วอยากให้สร้างเรคคอร์ดซ้ำตามค่าของฟิลด์ LOT_QTY
- แถมสร้างฟิลด์ใหม่ชื่อ S_QTY โดยแสดงการตัดค่าระหว่างฟิดล์ LOT ตัดออกจากฟิลด์ QTY แบบนี้

DATE        |   ITEM | LOCATION |   QTY |   LOT | LOT_QTY | S_QTY |
-----------------------------------------------------------------------------------------------
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 20        |
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 20        |
17/12/2014 |   A       |   A01            | 50      |     20 |       3           | 10        |
17/12/2014 |   B       |   A01            | 15      |     10 |       2           | 10        |
17/12/2014 |   B       |   A01            | 15      |     10 |       2           |    5        |
-----------------------------------------------------------------------------------------------

ใช่ป่าวครับ
2 @R19947
ถ้าจะสร้างโดยใช้คิวรี่ คงต้องใช้การสร้างอีกตารางขึ้นมาเทียบค่ากันเพื่อสร้างเรคคอร์ดซ้ำแทนการ Loop ประมาณนี้ครับ

1. ให้สร้างตารางใหม่ขึ้นมา โดยสมมุติใช้ชื่อ Tb_Piece โดยในตารางให้สร้างฟิลด์ชื่อ aSum กำหนด Data Type เป็น Number ไม่ต้องมี primarykey แต่ให้สร้าง index (Yes (No Duplicates)) ที่ฟิลด์ aSum

2. ให้ป้อนตัวเลขเรียงตั้งแต่ 1,2,3…,ค่าสูงสุดของฟิลด์ LOT_QTY ที่คิดว่าจะใช้มากสุดไม่เกินนั้น(จากตัวอย่างคือ 10 จะสร้างเป็นร้อยเป็นพันเผื่อไว้ก็ได้)
-Tb_Piece-
| aSum |
|----------|
|     1    |
|     2    |
|     3    |
|     4    |
|     5    |
|     6    |
|     7    |
|     8    |
|     9    |
|    10    |
----------

3. สร้างคิวรี่ใหม่ โดยนำเข้าตารางข้อมูลจริง สมมุติชื่อ Table1 และตาราง Tb_Piece มาสร้างเงื่อนไขเพื่อทำเรคคอร์ดซ้ำตามจำนวน โดยเขียน SQL statement ดังนี้:
------------------------------------------------------------
SELECT Table1.*,
-Int(-([QTY]/[LOT])) AS LOT_QTY,
IIf([QTY]>=[LOT]*[aSum],[LOT],[QTY] Mod [LOT]) AS S_QTY
FROM Table1, Tb_Piece
WHERE (-Int(-([QTY]/[LOT])))>=[Tb_Piece].[aSum]
ORDER BY Table1.ITEM, Tb_Piece.aSum;
------------------------------------------------------------
ปรับใช้ดูครับ
3 @R19949
คุณ TTT ขอบคุณมากนะครับ

ผมจะลองทำดูได้ผลอย่างไรจะเข้ามารายงานให้ทราบนะครับ

ขอบคุณมากเลยครับ

4 @R19950
คุณ TTT ครับ
ทำได้แล้วครับ ขอบพระคุณมากจริงๆ ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.4625s