Query นับ จำนวน By mat
กระทู้เก่าบอร์ด อ.Yeadram

 3,317   10
URL.หัวข้อ / URL
Query นับ จำนวน By mat

ใน excel เขียนด้วยสูตรนี้

Mat     สูตร                                              ผล
A     =COUNTIF($C$6:C6,C6)     1
A     =COUNTIF($C$6:C7,C7)     2
A     =COUNTIF($C$6:C8,C8)     3
B     =COUNTIF($C$6:C9,C9)     1
B     =COUNTIF($C$6:C10,C10)     2
C     =COUNTIF($C$6:C11,C11)     1
C     =COUNTIF($C$6:C12,C12)     2
C     =COUNTIF($C$6:C13,C13)     3
D     =COUNTIF($C$6:C14,C14)     1
E     =COUNTIF($C$6:C15,C15)     1

ใน Access ลองทำ query
SELECT Mat, (select count(mat) from TableA as AA where AA.mat = TableA.mat) AS ผล
FROM TableA;

แล้วผลไม่ได้ตามต้องการครับ

ต้องเขียน query อย่างไรหรือครับ

ขอบคุณครับ



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

1 @R03872
select Mat, count(mat) as Result
from tableA
group by Mat;

2 @R03877
ลองแล้ว ได้ผลไม่ตรงตามความต้องการครับ

Mat    Result
A       3
B       2
C       3
D       1
E       1

ครับ อยากได้แบบ
Mat    Result
A       1
A       2
A       3
B       1
B       2
C       1
C       2
C       3
D       1
E       1
3 @R03878
ค้น running sum ครับ หรือ sub query ครับ
ในเว็บบอร์ดนี่แหละ แล้วเอาไปประยุกต์
ขออภัยด้วยครับ อ่านโจกท์ไม่ดีเอง ตอบไวไปหน่อย
4 @R03884
ค้นและลองทำดูแล้วครับ

ได้ SELECT Mat, (select count(mat) from TableA as AA where AA.mat = TableA.mat) AS ผล
FROM TableA;

มา แต่ก็ยังไม่ตรงตามความต้องการครับ

ทดลองต่อไป
5 @R03885
- ด้วยโครงสร้างข้อมูลแบบนี้ ถ้าทำใน Query ด้วย SQL Statement ล้วนๆ ทำไม่ได้หรอกครับ ไม่ต้องไปลอง ยกเว้นคุณจะมีฟิลด์อื่นที่ใช้เรียงลำดับของ Mat ได้เพิ่มมาอีกฟิลด์นึง ก็พอทำได้

- ด้วยโครงสร้างข้อมูลแบบนี้ ถ้าทำใน Form ก็อาจทำได้ แต่ยากเหมือนกัน

- ด้วยโครงสร้างข้อมูลแบบนี้ ถ้าทำใน Report อันนี้ทำได้ไม่ยาก โดยการใช้ Running Sum property

- ไม่ก็ต้องสร้างฟิลด์ที่เก็บลำดับที่เอาไว้ แล้วรัน VBA โค้ดเพื่อสร้างลำดับที่ขึ้นมาภายหลังอีกที
6 @R03891
ต้องเพิ่มโครงสร้างข้อมูลแบบไหน ถึงจะใช้ Query ในการแสดงผลตามต้องการได้หรือครับ

ผมเคยลองใช้ Auto number ในการเรียงลำดับ Mat แล้วแต่ก็ยังมองภาพไ่ม่ออกว่าจะเอาไปใช้ได้ยังไงครับ

ขอบคุณสำหรับคำตอบมาก ๆ ครับ
7 @R03892
เอาแบบโจทย์จริง ที่ผมจะเอาไปใช้แล้วกันครับ เผื่อจะมีวิธีอื่นครับ

ID   Mat    Part
1     A       Aa
2     A       Ab
3     A       Ac
4     B       Ba
5     B       Bb
6     C       Ca
7     C       Cb
8     C       Cc
9     D       Da
10   E       Ea

คราวนี้ผมอยากได้ Query Crosstab เพื่อแสดงผลแบบ

Mat   1        2        3
A      Aa     Ab      Ac
B      Ba    Bb
C      Ca    Cb     Cc
D      Da
E      Ea

แต่ Crosstab ค่า value มันต้องเป็นตัวเลขด้วยข้อมูลที่มีอยู่มันทำไม่ได้
ผมก็เลยต้องเพิ่ม Column Result ขึ้นมาเพื่อนำไปทำ Column ใน Cross tab แล้วเอา ID ไปเป็น value แทนก็จะได้แสดงผลแบบ

Mat   1        2       3
A       1        2       3
B       4       5       
C       6      7        8
D      9
E      10

เมื่อได้แบบนี้แล้วก็น่าจะไปทำต่อให้ได้ผลตามที่ต้องการแบบแรกได้ครับ


ปัญหาคือผมใช้ Query ในการทำ Result ไม่ได้ต้องไปทำใน Excel แล้วมา Update ใน Access    ติดปัญหานี้ก็เลยนำมาถามครับ



8 @R03894
TRANSFORM First(Q.part) AS FirstOfpart
SELECT Q.mat
FROM (
     SELECT (
          select count(mat) from TableA as AA where AA.mat = TableA.mat and AA.id < TableA.id
          )+1 AS Rnn, TableA.mat, TableA.part
       FROM TableA
   ) As Q
GROUP BY Q.mat
PIVOT Q.Rnn In (1,2,3);
9 @R03895
โอ้ แบบนี้ใช่เลยครับ

Query ใช้ Pivot ได้ด้วยเหรอเนี่ย

ขอบคุณ คุณ yeadram มาก ๆ ครับ
10 @R20882
ขออนุญาต ขุด กระทู้หน่อยนะครับ

มีปัญหาคล้ายๆกัน

แต่ผมต้องการให้ไปนับใน report เลยครับ

เช่น ข้อมูลผมมี

5 4 2 2 1 ใช่ ใช่ ไม่ใช่

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