กระทู้เก่าบอร์ด อ.Yeadram
        
           2,304   5		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        เขียนโค้ดยังไงคะ  มือใหม่คะ      
     
ชื่อตารางคือ HP คะ
หากต้องการนับจำนวนเรคคอร์ดดูว่า บริษัท ไทย ออโต้ เทค จำกัด(ตามภาพคะ)
มีจำนวน HPACCT กี่ เรคคอร์ด ต้องเขียนโค้ดยังไงคะ ช่วยหน่อยคะ
ขอแบบอธิบายเป็นบรรทัดนะคะ อยากทราบรายละเอียด
				5 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R04208    
        
  
      ตอบ (R04202)
แบบนั้นไม่ถูกต้องดีนัก
- ถ้าไม่ต้องการระบุ ให้ตัด Where ออกไปเลยครับ ไม่ต้องระบุ ดับเบิลโควต
select CIFNO, COUNT(*) AS CNT from hp1 GROUP BY CIFNO;
- ถ้าต้องการระบุเป็น cifno ตัวอื่นก็ค่อยใส่เข้าไป
select CIFNO, COUNT(*) AS CNT from hp1 where CIFNO="002255" GROUP BY CIFNO;
- หรือถ้าต้องการให้ผู้ใช้ระบุเอง ก็ให้ใช้เป็นแบบการเติมพารามิเตอร์ครับ
select CIFNO, COUNT(*) AS CNT from hp1 where CIFNO= [กรุณาระบุ CIFNO] GROUP BY CIFNO;
ตอบ (R04204)
เกือบถูกแล้วครับ การระบุเงื่อนไขนะครับ ต้องดูว่า ฟิลด์ที่เราจะใส่เงื่อนไข เป็นชนิดข้อมูลอะไร ซึ่งผมดูจากภาพตัวอย่างที่คุณ sudteerak อัพมาให้ดูสังเกตเห็นว่า ฟิลด์ status น่าจะเก็บข้อมูลเป็น ตัวเลข เพราะฉะนั้น เมื่ออยู่ใน Where ก็ไม่ต้องใส่ เครื่องหมายฟันหนู (double quote) ในค่าของเงื่อนไขครับ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS=1 Or STATUS = 3
GROUP BY hp1.CIFNO;
หรือ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS=(1 or 3)
GROUP BY hp1.CIFNO;
หรือ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS IN(1,3)
GROUP BY hp1.CIFNO;
การเขียน statement เพื่อให้ SQL อ่านต้องระวังเรื่องเครื่องหมาย, เรื่องวรรคตอนด้วยครับ ระวังมันจะ เอ๋อเร๋อ ................. อิอิ
    
  แบบนั้นไม่ถูกต้องดีนัก
- ถ้าไม่ต้องการระบุ ให้ตัด Where ออกไปเลยครับ ไม่ต้องระบุ ดับเบิลโควต
select CIFNO, COUNT(*) AS CNT from hp1 GROUP BY CIFNO;
- ถ้าต้องการระบุเป็น cifno ตัวอื่นก็ค่อยใส่เข้าไป
select CIFNO, COUNT(*) AS CNT from hp1 where CIFNO="002255" GROUP BY CIFNO;
- หรือถ้าต้องการให้ผู้ใช้ระบุเอง ก็ให้ใช้เป็นแบบการเติมพารามิเตอร์ครับ
select CIFNO, COUNT(*) AS CNT from hp1 where CIFNO= [กรุณาระบุ CIFNO] GROUP BY CIFNO;
ตอบ (R04204)
เกือบถูกแล้วครับ การระบุเงื่อนไขนะครับ ต้องดูว่า ฟิลด์ที่เราจะใส่เงื่อนไข เป็นชนิดข้อมูลอะไร ซึ่งผมดูจากภาพตัวอย่างที่คุณ sudteerak อัพมาให้ดูสังเกตเห็นว่า ฟิลด์ status น่าจะเก็บข้อมูลเป็น ตัวเลข เพราะฉะนั้น เมื่ออยู่ใน Where ก็ไม่ต้องใส่ เครื่องหมายฟันหนู (double quote) ในค่าของเงื่อนไขครับ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS=1 Or STATUS = 3
GROUP BY hp1.CIFNO;
หรือ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS=(1 or 3)
GROUP BY hp1.CIFNO;
หรือ
SELECT hp1.CIFNO, Count(*) AS CNT
FROM hp1 where STATUS IN(1,3)
GROUP BY hp1.CIFNO;
การเขียน statement เพื่อให้ SQL อ่านต้องระวังเรื่องเครื่องหมาย, เรื่องวรรคตอนด้วยครับ ระวังมันจะ เอ๋อเร๋อ ................. อิอิ
        
    3 @R04223    
        
  
      ข้อ 1 ถึง ข้อ 2.1 เขียน statement ได้ว่า
SELECT HP.CIFNO, ACNAME, HPACCT, PDDAY
FROM HP INNER JOIN HP1 ON HP.CIFNO=HP1.CIFNO
WHERE HP1.STATUS=1 OR HP1.STATUS=3;
ส่วนข้อ 2.2 ไม่เข้าใจโจทก์ครับ
แบ่งเป็น 3 ช่วง???
แสดงผลอย่างไร???
    
  SELECT HP.CIFNO, ACNAME, HPACCT, PDDAY
FROM HP INNER JOIN HP1 ON HP.CIFNO=HP1.CIFNO
WHERE HP1.STATUS=1 OR HP1.STATUS=3;
ส่วนข้อ 2.2 ไม่เข้าใจโจทก์ครับ
แบ่งเป็น 3 ช่วง???
แสดงผลอย่างไร???
        
    4 @R04235    
        
  
      SELECT HP.CIFNO, ACNAME, HPACCT, PDDAY 
iif(PDDAY=0,"Y","") AS STEP1,
iif(PDDAY>0 AND PDDAY30 AND PDDAY60 AND PDDAY90,"Y","") AS STEP5
FROM HP INNER JOIN HP1 ON HP.CIFNO=HP1.CIFNO
WHERE HP1.STATUS=1 OR HP1.STATUS=3;
คำว่า STEP1, STEP2, ....
คือคำที่สวรรค์ประทานมาในห้วงความฝัน...........
    
  iif(PDDAY=0,"Y","") AS STEP1,
iif(PDDAY>0 AND PDDAY30 AND PDDAY60 AND PDDAY90,"Y","") AS STEP5
FROM HP INNER JOIN HP1 ON HP.CIFNO=HP1.CIFNO
WHERE HP1.STATUS=1 OR HP1.STATUS=3;
คำว่า STEP1, STEP2, ....
คือคำที่สวรรค์ประทานมาในห้วงความฝัน...........
        
    5 @R04252    
        
      
การโพสต์โค้ดยาวๆ มันอาจจะมีเครื่องหมายเยอะแยะ ซึ่งมันมีปัญหากับ สคริปต์ของเว็บบอร์ดครับ จึงทำให้ มันไปไม่ครบทุกเครื่องหมาย ทุกอักขระ
และผมเอง พอกดโพสต์เสร็จก็ไม่ได้ดูด้วยว่า มันไปครบหรือเปล่า ต้องขออภัยด้วยครับ
ครั้งนี้ผมลองโพสต์ใหม่ครับ น่าจะไปครบนะครับ เพราะใส่กรอบเอาไว้
    
  
    SELECT HP.CIFNO, ACNAME, HPACCT, PDDAY,  
iif(HP1.[PDDAY]=0,"Y","") AS STEP1, 
iif(HP1.[PDDAY] > 0 AND HP1.[PDDAY] < 30, "Y","") AS STEP2,
iif(HP1.[PDDAY] >= 30 AND HP1.[PDDAY] < 60, "Y","") AS STEP3,
iif(HP1.[PDDAY] >= 60 AND HP1.[PDDAY] < 90, "Y","") AS STEP4,
iif(HP1.[PDDAY] >= 90,"Y","") AS STEP5 
FROM HP INNER JOIN HP1 ON HP.CIFNO=HP1.CIFNO 
WHERE HP1.STATUS=1 OR HP1.STATUS=3;
การโพสต์โค้ดยาวๆ มันอาจจะมีเครื่องหมายเยอะแยะ ซึ่งมันมีปัญหากับ สคริปต์ของเว็บบอร์ดครับ จึงทำให้ มันไปไม่ครบทุกเครื่องหมาย ทุกอักขระ
และผมเอง พอกดโพสต์เสร็จก็ไม่ได้ดูด้วยว่า มันไปครบหรือเปล่า ต้องขออภัยด้วยครับ
ครั้งนี้ผมลองโพสต์ใหม่ครับ น่าจะไปครบนะครับ เพราะใส่กรอบเอาไว้
      Time: 0.1159s
    
      
		
เช่น ต้องการให้แสดงผลทางค?วรี่ ก็เขียน statement ว่า
select CIFNO, COUNT(*) AS CNT from hp1 where CIFNO=51000550 GROUP BY CIFNO;
เอาไปสร้างคิวรี่ครับ เมื่อแสดงผลคิวรี่ ก็จะได้จำนวนนับที่ต้องการครับ อยู่ในคอลัมภ์ที่ 2 ชื่อคอลัมภ์ว่า CNT
หรือถ้าต้องการให้ปรากฏใน textbox หน้าฟอร์ม
- สร้าง textbox เปล่าๆ ตัวหนึ่ง
- เขียนนิพจน์ใน textbox ตัวนั้นว่า
=Dcount("HPACCT","HP1","[CIFNO] = 51000550")
เมื่อรันฟอร์มแสดงผล textbox ตัวนี้ก็จะให้คำตอบที่ต้องการครับ