ทำ sql แสดง แบบ แยก รายการแต่ละเดือนครับ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 352   9
URL.หัวข้อ / URL
ทำ sql แสดง แบบ แยก รายการแต่ละเดือนครับ

สวัสดีครับ อาจารย์
ผมอยากรบกวนอาจารย์ให้ช่วยนิดนึงครบับ

คือผมมีตารางที่เก็บข้อมูลสินค้าเข้าอยู่ครับเก็บ มีฟิลด์ดังนี้
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

1 @R03785
Data Base ครับ เอาข้อมูลจาก ตาราง Invoice, PO, Vendor ครับ
ผมลองทำ query โดยปรับปรุงมาจาก หัวข้อเก่า ๆ ใน webboard นี้แล้ว โดยเป็น query ชื่อ Year Purchase ครับ แต่ค่าออกมาไม่ถูกต้องครับ ช่วยอธิบายด้วยนะครับ
2 @R03873
ผมลองใช้ cross tab แล้วครับ แต่ถ้าเดือนไหนไม่มีข้อมูลเลย มันก้อไม่ขึ้นเดือนให้อ่ะครับ ใช้ถ้าไม่มีรับเข้าเดือน 6 ข้อมูล ก้อไม่มี คอลัมน์ เดือน 6 ครับ อยากให้มันแสดงด้วย แล้วก็อยากให้มันมีคำนวน เปอร์เซ็นต์ ให้ด้วยครับ แต่cross tab คำนวนไม่ได้
3 @R03878
ลองใช้ wizard ช่วยสร้างดูซิค่ะ อาจจะใช่สิ่งที่ต้องการทั้งหมด
4 @R03891
ขอบคุณ คุณฐิติมาภรณ์ ครับสำหรับคำแนะนำครับ

แต่มันก็ยังไม่ออกอยู่ดีครับ คือผมอยากให้มันแสดงแบบที่อยู่ใน 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, ...)


6 @R03916
ขอบคุณครับอาจารย์สำหรับคำแนะนำและคำเตือนครับ

ผมไม่เข้าใจข้อ 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 อื่น

ซับซ้อนหน่อยนึง ช้านิดหน่อย แต่ก็ได้ข้อมูลตามที่คาดครับ
8 @R03919
query แรก ตั้งชื่อว่า "Purchase list" นะครับ ลืมบอกไป
9 @R03955
ขอบคุณ คุณ nutz ,อ.สุภาพ และ คุณ ฐิติมาภรณ์ มากครับ
ได้ตามต้องการแล้ว
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0516s