คำนวณค่า value ใน Crosstab Queryให้อยู่ในบรรทัดเดี
กระทู้เก่าบอร์ด อ.Yeadram

 4,933   11
URL.หัวข้อ / URL
คำนวณค่า value ใน Crosstab Queryให้อยู่ในบรรทัดเดี

คำนวณค่า value ใน Crosstab Queryให้อยู่ในบรรทัดเดียวกันได้หรือไม่โดยมีการเลือกช่วงข้อมูลออกมา



จากภาพตัวอย่างใน Crosstab query ด้านบน MaterialAllWeekQ เป็นไปอย่างที่ต้องการ คือวัตถุดิบชนิดเดียวกัน แยกข้อมูลตามแต่ละweekที่ต้องการรวมในบรรทัดเดียวกัน โดยเนื่องจากยังไม่มีการเลือกช่วงของข้อมูลออกมา คือให้คำนวณข้อมูลที่มีทั้งหมดเลย เลยไม่มีปัญหา

แต่จาก Crosstab query ด้านล่าง MaterialWeekQ test2 ได้มีการเลือกช่วงข้อมูลของ week ออกมา 2 weeks ปัญหาอยู่ที่ว่าวัตถุดิบชนิดเดียวกัน แต่ใน access ได้แยกข้อมูลออกมาเป็นหลายบรรทัดตามแต่ละ PO แต่ละ week ที่ใส่ลงไป

สิ่งที่ต้องการคืออยากให้รวมวัตถุดิบชนิดเดียวกันอยู่ในบรรทัดเดียวกันโดยที่ไม่แยกบรรทัด แล้วคำนวณ [ขาดรวม] ออกมาเลย เช่นที่ต้องการคือ
หน้าผ้า1 เขียว1หนา4
Stock = 3
Week 5445 = -3
Week 5448 = -1
รวมค้างจ่าย = -4
ขาดรวม= -1
ทั้งหมดนี้อยากให้อยู่บรรทัดเดียวกัน

ผมไม่แน่ใจว่าเขียนสูตรตรงไหนผิดรึเปล่าหรือว่าต้องไปแก้ไขตรงไหน
ยังไงรบกวนช่วยชี้แนะด้วยครับ ลองหาวิธีทำมาหลายวันแล้ว ก็ยังไม่ได้สักที

ขอบคุณครับ

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

1 @R11489
คือข้อมูลมันน้อยครับ แต่เดาๆ ลองดูตรงที่ใส่เงื่อนไขสัปดาห์ เลือกเป็น Where ดูนะครับ
2 @R11490
สังเกตุดูที่ column สุดท้ายนะครับ
MaterialAllWeekQ:
-ขาด: [Stock] + [sumofbalanceusage]
MaterialWeekQ test2:
-ขาดรวม: [Stock] + [Balanceusage]

เห็นหรือยังครับ
ต่างกันตรงที่ sum กับ ไม่ sum ไงครับ

3 @R11493


จากที่คุณ Un กับคุณ Pichai TC แนะนำมา ก็ได้ลองทำตามแล้วครับ
ผลตามรูปครับ
คือบรรทัดมันรวมกันครับ แต่ว่าในส่วนของการใส่ sumofbalanceusage นั้น เหมือนกับว่ามันรวมค่าทั้งหมดออกมาใช้ในการคำนวณ คือไม่ได้ดึงค่าที่เราเลือก(Criteria)เฉพาะ week นั้นมาคำนวณครับ

ถ้าเทียบผลกับรูปแรกในช่อง (-ขาดรวม) ที่ไม่ได้มีการcriteria Week ตัวเลขจะตรงกันครับ คือ ในบรรทัด หน้าผ้า1 เขียว1หนา4 จะออกมาที่ -3 ทั้งๆที่จริงมันควรจะเป็น -1

รบกวนหน่อยนะครับ
ขอบคุณครับ
4 @R11494
ขอรบกวนถามเกี่ยวกับการคำนวนระบบคลังสินค้าในaccessนะครับ ผมตั้งกระทู้ใหม่ไม่เป็น คือว่า ผมมี Field productnumberในtblproduct และordernumberในtblorder
การคำนวนที่ผมอยากได้คือ productnumber=productnumber-ordernumber ผลลัพท์คือจำนวนสินค้าที่เหลือจริงครับ แต่ผมลองคำนวนผ่านqryแล้ว หลังจากที่มันคำนวนให้แล้วมันไม่ยอมเก็บค่าหรือupdateให้ครับ เช่น มีสินค้าA 10หน่วย ส่งลูกค้าA 5หน่วย มันคำนวนแล้วเหลือสินค้าA 5หน่วย แต่มันไม่ยอมเก็บค่าไว้ พอลูกค้าฺBสั่งอีก 5 หน่วย มันก็เอาข้อมูลเก่าหรือจำนวนเดิมคือ10ไปตั้งลบครับ ผมก็ไม่รู้ว่าจะทำอย่างไรเพื่อให้มันupdateข้อมูลหลังคำนวน รบกวนขอท่านผุ้รุ้ชีแนะด้วยครับ ขอแบบเข้าใจง่ายที่สุดนะครับ ผมเป็นคนหัวช้ามาก ขอบคุณครับ
5 @R11495
คิดว่าต้องทำ query ที่ Select ..., Sum(BalanceUsage) From UsageT Where Week ... Group By ... รอไว้ก่อน
แล้วค่อยมาเข้า CrossTab ครับ

ลองเปลี่ยน view เป็น SQL แล้ว copy มา post ให้ดูหน่อยจะดีกว่าครับ
จะได้แก้ให้ได้ถูกจุด
6 @R11501
คิดว่าต้องทำ query ที่ Select ..., Sum(BalanceUsage) From UsageT Where Week ... Group By ... รอไว้ก่อน
แล้วค่อยมาเข้า CrossTab ครับ

อันนี้ไม่ค่อยเข้าใจครับ พอดีเขียน SQL ไม่เป็นเลยครับ

PARAMETERS [StartWeek] Short, [EndWeek] Short;
TRANSFORM Sum(UsageT.BalanceUsage) AS SumOfBalanceUsage1
SELECT KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+[sumofbalanceusage] AS [-ขาดรวม], Sum(UsageT.BalanceUsage) AS รวมค้างจ่าย
FROM StockQ INNER JOIN (POOptionT INNER JOIN ((KindT INNER JOIN MaterialT ON KindT.ID = MaterialT.KindID) INNER JOIN UsageT ON MaterialT.ID = UsageT.MaterialID) ON POOptionT.POID = UsageT.POID) ON StockQ.MatID = MaterialT.ID
WHERE (((POOptionT.Week) Between [StartWeek] And [EndWeek]))
GROUP BY KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+[sumofbalanceusage]
ORDER BY KindT.Kind, MaterialT.Material, POOptionT.Week DESC
PIVOT POOptionT.Week;

ส่วนอันนี้เป็น SQL ของ crosstab query นี้ครับ

ขอบคุณครับ
7 @R11503
ขอข้อมูลเพิ่มครับ
[sumofbalanceusage] มาจาก table StockQ หรือเปล่าครับ ?
8 @R11504


ใช่ครับ [sumofbalanceusage] มาจาก table StockQ
เพราะลองใส่ StockQ.sumofbalanceusage จะสามารถ Run query ได้

แต่ลองใส่ UsageT.sumofbalanceusage จะไม่สามารถ Run query ได้
มันขึ้นฟ้องว่า [UsageT.sumofbalanceusage] cound refer to more than one table listed in the FROM clause of your SQL statement.

ซึ่งก็คิดว่า ถ้าเขียน SQL ได้ ก็น่าจะได้ผลลัพธ์ตามที่ต้องการ แต่ว่าเขียนไม่เป็นครับ

ขอบคุณครับ
9 @R11505
[sumofbalanceusage] จาก table StockQ เป็นจุดที่ทำให้ผิดครับ

ลองแบบนี้ดูครับ
เปลี่ยน [sumofbalanceusage] เป็น Sum(UsageT.BalanceUsage)

PARAMETERS [StartWeek] Short, [EndWeek] Short;
TRANSFORM Sum(UsageT.BalanceUsage) AS SumOfBalanceUsage1
SELECT KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+Sum(UsageT.BalanceUsage) AS [-ขาดรวม], Sum(UsageT.BalanceUsage) AS รวมค้างจ่าย
FROM StockQ INNER JOIN (POOptionT INNER JOIN ((KindT INNER JOIN MaterialT ON KindT.ID = MaterialT.KindID) INNER JOIN UsageT ON MaterialT.ID = UsageT.MaterialID) ON POOptionT.POID = UsageT.POID) ON StockQ.MatID = MaterialT.ID
WHERE (((POOptionT.Week) Between [StartWeek] And [EndWeek]))
GROUP BY KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+[sumofbalanceusage]
ORDER BY KindT.Kind, MaterialT.Material, POOptionT.Week DESC
PIVOT POOptionT.Week;
10 @R11506
ลืมครับ ตรง Group By ต้องแก้ตามด้วยครับ

PARAMETERS [StartWeek] Short, [EndWeek] Short;
TRANSFORM Sum(UsageT.BalanceUsage) AS SumOfBalanceUsage1
SELECT KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+Sum(UsageT.BalanceUsage) AS [-ขาดรวม], Sum(UsageT.BalanceUsage) AS รวมค้างจ่าย
FROM StockQ INNER JOIN (POOptionT INNER JOIN ((KindT INNER JOIN MaterialT ON KindT.ID = MaterialT.KindID) INNER JOIN UsageT ON MaterialT.ID = UsageT.MaterialID) ON POOptionT.POID = UsageT.POID) ON StockQ.MatID = MaterialT.ID
WHERE (((POOptionT.Week) Between [StartWeek] And [EndWeek]))
GROUP BY KindT.Kind, MaterialT.Material, StockQ.Stock, [stock]+Sum(UsageT.BalanceUsage) ORDER BY KindT.Kind, MaterialT.Material, POOptionT.Week DESC
PIVOT POOptionT.Week;

แถมท้ายครับ
ผมว่าการนำไปใช้งานต้องระวังนะครับ เพราะ StockQ.Stock เป็นข้อมูลตั้งต้น ถ้าจะหาผล [-ขาดรวม] ต้องคำนวณตั้งแต่ week แรกเป็นต้นมา ไม่เช่นนั้น ค่าจะไม่ตรงตามจริงนะครับ
11 @R11519
ได้แล้วครับ ผลออกมาเป็นตามที่ต้องการ
คือต้องเพิ่ม [stock]+[sumofbalanceusage] เป็น Group By
และ -ขาดรวม: [stock]+Sum([UsageT].[BalanceUsage]) เป็น Expression

เดี๋ยวต้องศึกษาเพิ่มเติมเกี่ยวกับ Group By ครับ ว่ามันไว้ทำอะไร กำลังsearchข้อมูลเกี่ยวกับ Group By ของเก่าอยู่ครับ

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