กระทู้เก่าบอร์ด อ.Yeadram
5,030 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
ทั้งหมดนี้อยากให้อยู่บรรทัดเดียวกัน
ผมไม่แน่ใจว่าเขียนสูตรตรงไหนผิดรึเปล่าหรือว่าต้องไปแก้ไขตรงไหน
ยังไงรบกวนช่วยชี้แนะด้วยครับ ลองหาวิธีทำมาหลายวันแล้ว ก็ยังไม่ได้สักที
ขอบคุณครับ
จากภาพตัวอย่างใน 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 ไงครับ
MaterialAllWeekQ:
-ขาด: [Stock] + [sumofbalanceusage]
MaterialWeekQ test2:
-ขาดรวม: [Stock] + [Balanceusage]
เห็นหรือยังครับ
ต่างกันตรงที่ sum กับ ไม่ sum ไงครับ
3 @R11493
จากที่คุณ Un กับคุณ Pichai TC แนะนำมา ก็ได้ลองทำตามแล้วครับ
ผลตามรูปครับ
คือบรรทัดมันรวมกันครับ แต่ว่าในส่วนของการใส่ sumofbalanceusage นั้น เหมือนกับว่ามันรวมค่าทั้งหมดออกมาใช้ในการคำนวณ คือไม่ได้ดึงค่าที่เราเลือก(Criteria)เฉพาะ week นั้นมาคำนวณครับ
ถ้าเทียบผลกับรูปแรกในช่อง (-ขาดรวม) ที่ไม่ได้มีการcriteria Week ตัวเลขจะตรงกันครับ คือ ในบรรทัด หน้าผ้า1 เขียว1หนา4 จะออกมาที่ -3 ทั้งๆที่จริงมันควรจะเป็น -1
รบกวนหน่อยนะครับ
ขอบคุณครับ
จากที่คุณ 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ข้อมูลหลังคำนวน รบกวนขอท่านผุ้รุ้ชีแนะด้วยครับ ขอแบบเข้าใจง่ายที่สุดนะครับ ผมเป็นคนหัวช้ามาก ขอบคุณครับ
การคำนวนที่ผมอยากได้คือ 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 ให้ดูหน่อยจะดีกว่าครับ
จะได้แก้ให้ได้ถูกจุด
แล้วค่อยมาเข้า 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 นี้ครับ
ขอบคุณครับ
แล้วค่อยมาเข้า 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 หรือเปล่าครับ ?
[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 ได้ ก็น่าจะได้ผลลัพธ์ตามที่ต้องการ แต่ว่าเขียนไม่เป็นครับ
ขอบคุณครับ
ใช่ครับ [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;
ลองแบบนี้ดูครับ
เปลี่ยน [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 แรกเป็นต้นมา ไม่เช่นนั้น ค่าจะไม่ตรงตามจริงนะครับ
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 ของเก่าอยู่ครับ
ขอบคุณที่ช่วยชี้แนะครับ
คือต้องเพิ่ม [stock]+[sumofbalanceusage] เป็น Group By
และ -ขาดรวม: [stock]+Sum([UsageT].[BalanceUsage]) เป็น Expression
เดี๋ยวต้องศึกษาเพิ่มเติมเกี่ยวกับ Group By ครับ ว่ามันไว้ทำอะไร กำลังsearchข้อมูลเกี่ยวกับ Group By ของเก่าอยู่ครับ
ขอบคุณที่ช่วยชี้แนะครับ
Time: 0.3413s