กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
415 9
URL.หัวข้อ /
URL
ทำ sql แสดง แบบ แยก รายการแต่ละเดือนครับ
สวัสดีครับ อาจารย์
ผมอยากรบกวนอาจารย์ให้ช่วยนิดนึงครบับ
คือผมมีตารางที่เก็บข้อมูลสินค้าเข้าอยู่ครับเก็บ มีฟิลด์ดังนี้
Date,ProductNo,Qty,Total
Date เก็บเป็น type Date/Time นะครับ
คราวนี้ผมอยากจะนำมาแสดงรายงานครับโดยให้แสดงฟิลด์เป็นรูปแบบดังนี้
ProductNo,Jan,Feb,Mar,Apr,.......,Dec ครับโดย ข้อมูลจะแยกเป็นแต่ละเดือน ครับ
รบกวนอาจารย์ช่วยเขียน Query ให้ด้วยครับ
ผมอยากรบกวนอาจารย์ให้ช่วยนิดนึงครบับ
คือผมมีตารางที่เก็บข้อมูลสินค้าเข้าอยู่ครับเก็บ มีฟิลด์ดังนี้
Date,ProductNo,Qty,Total
Date เก็บเป็น type Date/Time นะครับ
คราวนี้ผมอยากจะนำมาแสดงรายงานครับโดยให้แสดงฟิลด์เป็นรูปแบบดังนี้
ProductNo,Jan,Feb,Mar,Apr,.......,Dec ครับโดย ข้อมูลจะแยกเป็นแต่ละเดือน ครับ
รบกวนอาจารย์ช่วยเขียน Query ให้ด้วยครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R03873
ผมลองใช้ cross tab แล้วครับ แต่ถ้าเดือนไหนไม่มีข้อมูลเลย มันก้อไม่ขึ้นเดือนให้อ่ะครับ ใช้ถ้าไม่มีรับเข้าเดือน 6 ข้อมูล ก้อไม่มี คอลัมน์ เดือน 6 ครับ อยากให้มันแสดงด้วย แล้วก็อยากให้มันมีคำนวน เปอร์เซ็นต์ ให้ด้วยครับ แต่cross tab คำนวนไม่ได้
3 @R03878
ลองใช้ wizard ช่วยสร้างดูซิค่ะ อาจจะใช่สิ่งที่ต้องการทั้งหมด
4 @R03891
ขอบคุณ คุณฐิติมาภรณ์ ครับสำหรับคำแนะนำครับ
แต่มันก็ยังไม่ออกอยู่ดีครับ คือผมอยากให้มันแสดงแบบที่อยู่ใน YearPurchase Query ครับ คือ มีแสดง คอลัมน์ของทุกเดือน คราวนี้พอผมทำให้แสดงได้ทุกเดือนแล้ว ค่าที่ออกมามันไม่ถูกต้องครับ ค่าที่ถูกต้องมันต้องเป็นตามรูป result.jpg ที่แนบไปนี้ครับ พอผมใช้Crosstab ดู มันมีค่าถูกต้องครับ แต่มีเดือนไม่ครบทั้ง 12 เดือน แบบรูป cross tab.jpg ครับ มีวิธีทำหรือตัวอย่างให้ดูไหมครับ
แต่มันก็ยังไม่ออกอยู่ดีครับ คือผมอยากให้มันแสดงแบบที่อยู่ใน YearPurchase Query ครับ คือ มีแสดง คอลัมน์ของทุกเดือน คราวนี้พอผมทำให้แสดงได้ทุกเดือนแล้ว ค่าที่ออกมามันไม่ถูกต้องครับ ค่าที่ถูกต้องมันต้องเป็นตามรูป result.jpg ที่แนบไปนี้ครับ พอผมใช้Crosstab ดู มันมีค่าถูกต้องครับ แต่มีเดือนไม่ครบทั้ง 12 เดือน แบบรูป cross tab.jpg ครับ มีวิธีทำหรือตัวอย่างให้ดูไหมครับ
5 @R03895
ส่วนมากเราจะใช้ Report ในการพิมพ์รายงานออกมาดู ไม่ค่อยนิยมดูใน Query
ปัญหานี้น่าจะแก้ได้ 2 ทางครับ
1. ใช้ Dynamic Crosstab Report
หาดูตัวอย่างของ อ. BADMan ที่ http://www.thai-access.com/suphap.php?topic_id=893
2. .ให้วิธีการเพิ่มเดือนที่ขาดหายไปลงไป แต่ไม่ต้องมีค่าอะไร Total ลงไป โดยให้ใส่แค่ Company กับ Date ก็พอ
ก็จะได้ครบทุกเดือน
(ไม่ควรตั้งชื่อฟีลด์ให้ตรงกับคำสงวนของ Access เช่น Date, Time, Name, ...)
ปัญหานี้น่าจะแก้ได้ 2 ทางครับ
1. ใช้ Dynamic Crosstab Report
หาดูตัวอย่างของ อ. BADMan ที่ http://www.thai-access.com/suphap.php?topic_id=893
2. .ให้วิธีการเพิ่มเดือนที่ขาดหายไปลงไป แต่ไม่ต้องมีค่าอะไร Total ลงไป โดยให้ใส่แค่ Company กับ Date ก็พอ
ก็จะได้ครบทุกเดือน
(ไม่ควรตั้งชื่อฟีลด์ให้ตรงกับคำสงวนของ Access เช่น Date, Time, Name, ...)
6 @R03916
ขอบคุณครับอาจารย์สำหรับคำแนะนำและคำเตือนครับ
ผมไม่เข้าใจข้อ 2 ครับที่ให้ใส่แค่ แค่ Company กับ Date ครับ เพราะว่าผมลองแล้วมันก็ได้แค่ เดือน 5 ครับ
ผมไม่เข้าใจข้อ 2 ครับที่ให้ใส่แค่ แค่ Company กับ Date ครับ เพราะว่าผมลองแล้วมันก็ได้แค่ เดือน 5 ครับ
7 @R03918
query แรกเพื่อให้ได้ฟิลด์ที่คุณต้องการ 4 ตัว
SELECT Invoice.Date, InvDetail.ProdNo, InvDetail.Qty, InvDetail.Total
FROM (Invoice INNER JOIN InvDetail ON Invoice.InvNo = InvDetail.InvNo) INNER JOIN PO ON Invoice.PONo = PO.PONo;
query 2 crosstab ให้ได้ตามที่ต้องการ
TRANSFORM Sum([Purchase List].Total) AS [The Value]
SELECT [Purchase List].ProdNo, Sum([Purchase List].Total) AS [Total Of Total]
FROM [Purchase List]
GROUP BY [Purchase List].ProdNo
PIVOT Format([Date],"mmm") In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
ทั้งหมดทำโดยใช้ wizard ครับ
แล้วถ้าจะคำนวณเปอร์เซนต์ หรือเพิ่ม prodname etc. ลงไปอีก
ก็ต้องสร้าง select query แบบธรรมดามาอีกอันมาครอบ crosstab เอาไว้อีกที
โดยเลือกทุกฟิลด์ของ crosstab นั้น+ฟิลด์คำนวณ or ฟิลด์เพิ่มเติมที่มาจาก table อื่น
ซับซ้อนหน่อยนึง ช้านิดหน่อย แต่ก็ได้ข้อมูลตามที่คาดครับ
SELECT Invoice.Date, InvDetail.ProdNo, InvDetail.Qty, InvDetail.Total
FROM (Invoice INNER JOIN InvDetail ON Invoice.InvNo = InvDetail.InvNo) INNER JOIN PO ON Invoice.PONo = PO.PONo;
query 2 crosstab ให้ได้ตามที่ต้องการ
TRANSFORM Sum([Purchase List].Total) AS [The Value]
SELECT [Purchase List].ProdNo, Sum([Purchase List].Total) AS [Total Of Total]
FROM [Purchase List]
GROUP BY [Purchase List].ProdNo
PIVOT Format([Date],"mmm") In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
ทั้งหมดทำโดยใช้ wizard ครับ
แล้วถ้าจะคำนวณเปอร์เซนต์ หรือเพิ่ม prodname etc. ลงไปอีก
ก็ต้องสร้าง select query แบบธรรมดามาอีกอันมาครอบ crosstab เอาไว้อีกที
โดยเลือกทุกฟิลด์ของ crosstab นั้น+ฟิลด์คำนวณ or ฟิลด์เพิ่มเติมที่มาจาก table อื่น
ซับซ้อนหน่อยนึง ช้านิดหน่อย แต่ก็ได้ข้อมูลตามที่คาดครับ
8 @R03919
query แรก ตั้งชื่อว่า "Purchase list" นะครับ ลืมบอกไป
9 @R03955
ขอบคุณ คุณ nutz ,อ.สุภาพ และ คุณ ฐิติมาภรณ์ มากครับ
ได้ตามต้องการแล้ว
ได้ตามต้องการแล้ว
Time: 0.0950s
ผมลองทำ query โดยปรับปรุงมาจาก หัวข้อเก่า ๆ ใน webboard นี้แล้ว โดยเป็น query ชื่อ Year Purchase ครับ แต่ค่าออกมาไม่ถูกต้องครับ ช่วยอธิบายด้วยนะครับ