กระทู้เก่าบอร์ด อ.Yeadram
        
           1,624   4		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        เรื่องการ Query ข้อมูล      
    
      ผมมีตารางดังนี้ครับ
ชื่อ วันเดือนปีเกิด อายุ เลขที่ทรัพย์สิน วันที่คืนทรัพย์สิน วันยุติเรื่อง
ผมต้องการ Query ข้อมูลโดยให้แสดง เฉพาะเรดคอร์ด ที่
"อายุ" มากกว่าหรือเท่ากับ 20 และ ถ้า "เลขที่ทรัพย์สิน" ไม่ว่าง "วันที่คืนทรัพย์สิน" ต้องไม่ว่าง แต่ถ้า "เลขที่ทรัพย์สิน" ว่าง "วันที่คืนทรัพย์สิน" ต้องว่างด้วย โดย "วันยุติเรื่อง" ต้อง ว่างเสมอ
ผมต้องเขียน sql อย่างไรครับ
    
    
  ชื่อ วันเดือนปีเกิด อายุ เลขที่ทรัพย์สิน วันที่คืนทรัพย์สิน วันยุติเรื่อง
ผมต้องการ Query ข้อมูลโดยให้แสดง เฉพาะเรดคอร์ด ที่
"อายุ" มากกว่าหรือเท่ากับ 20 และ ถ้า "เลขที่ทรัพย์สิน" ไม่ว่าง "วันที่คืนทรัพย์สิน" ต้องไม่ว่าง แต่ถ้า "เลขที่ทรัพย์สิน" ว่าง "วันที่คืนทรัพย์สิน" ต้องว่างด้วย โดย "วันยุติเรื่อง" ต้อง ว่างเสมอ
ผมต้องเขียน sql อย่างไรครับ
				4 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R12996    
        
  
      where (age>=20) and
(iif(isnull(rentNo) and isnull(rentDateBack), "NullRent","")="NullRent") and
(iif(not isnull(rentNo) and not isnull(rentDateBack), "HaveRent","")="HaveRent") and
(isnull(FinishDate))
    
  (iif(isnull(rentNo) and isnull(rentDateBack), "NullRent","")="NullRent") and
(iif(not isnull(rentNo) and not isnull(rentDateBack), "HaveRent","")="HaveRent") and
(isnull(FinishDate))
        
    3 @R13002    
        
  
      ได้แล้วครับตามวิธีการของอาจารย์ PichaiTC 
ส่วนวิธีของอาจารย์ yeadram ได้ผลการ Query ไม่ตรงครับ คือ ลองแล้วในตารางมีข้อมูลหนึ่งแถวที่ตรงกับเงื่อนไขที่ผมบอกไว้แต่มันไม่แสดงออกมาครับ
แต่อย่างไรก็ตามต้องขอขอบคุณอาจารย์ทั้งสองท่านที่ให้ความช่วยเหลือครับ
    
  ส่วนวิธีของอาจารย์ yeadram ได้ผลการ Query ไม่ตรงครับ คือ ลองแล้วในตารางมีข้อมูลหนึ่งแถวที่ตรงกับเงื่อนไขที่ผมบอกไว้แต่มันไม่แสดงออกมาครับ
แต่อย่างไรก็ตามต้องขอขอบคุณอาจารย์ทั้งสองท่านที่ให้ความช่วยเหลือครับ
        
    4 @R13005    
        
    
      ผมว่ากรณีนี้เป็น กรณีศึกษาได้นะครับ
ผมคิดว่าการสร้าง condition แบบนี้ไม่ใช่เรีืองยากเลย
ถ้าเราสามารถสร้างประโยคเงื่อนไข(ภาษาคน) ที่ถูกต้องได้ เราก็จะสามารถแปลงเป็นภาษา comp. ได้ง่ายๆเพียงแค่รู้คำสั่ง
แต่สิ่งผิดพลาดที่มักจะพบ คือ ประโยคเงื่อนไขที่สร้างขึ้นมามักจะไม่ถูกต้อง
เช่นกรณีนี้ คำว่า "ถ้า" วางไว้ผิดที่ ทำให้ตีความว่าต้องใช้ iif(),
และคำว่า "แต่" เป็นคำที่ตีความยาก เพราะ "แต่" บางครั้งเป็น And หรือ OR ก็ได้
อีกคำ "หรือ" นี่น่ากลัว เพราะอาจจะเป็น OR (a OR b --> only a = true, only b = true, a and b = true, not a and not b = false)
หรือ XOR (exclusive or; a XOR b --> only a = true, only b = true, a and b = false, not a and not b = false)
เพราะฉะนั้น ก่อนจะคิดว่าต้องเขียน ภาษาคอม (code) อย่างไร คิดให้ดีก่อนว่าเราคิด ภาษาคน ได้ถูกหรือยัง
*** แถม;- "ถึงผมจะหล่อ แต่ ผมก็ฉลาดนะ"
    
    
  ผมคิดว่าการสร้าง condition แบบนี้ไม่ใช่เรีืองยากเลย
ถ้าเราสามารถสร้างประโยคเงื่อนไข(ภาษาคน) ที่ถูกต้องได้ เราก็จะสามารถแปลงเป็นภาษา comp. ได้ง่ายๆเพียงแค่รู้คำสั่ง
แต่สิ่งผิดพลาดที่มักจะพบ คือ ประโยคเงื่อนไขที่สร้างขึ้นมามักจะไม่ถูกต้อง
เช่นกรณีนี้ คำว่า "ถ้า" วางไว้ผิดที่ ทำให้ตีความว่าต้องใช้ iif(),
และคำว่า "แต่" เป็นคำที่ตีความยาก เพราะ "แต่" บางครั้งเป็น And หรือ OR ก็ได้
อีกคำ "หรือ" นี่น่ากลัว เพราะอาจจะเป็น OR (a OR b --> only a = true, only b = true, a and b = true, not a and not b = false)
หรือ XOR (exclusive or; a XOR b --> only a = true, only b = true, a and b = false, not a and not b = false)
เพราะฉะนั้น ก่อนจะคิดว่าต้องเขียน ภาษาคอม (code) อย่างไร คิดให้ดีก่อนว่าเราคิด ภาษาคน ได้ถูกหรือยัง
*** แถม;- "ถึงผมจะหล่อ แต่ ผมก็ฉลาดนะ"
      Time: 0.0633s
    
      
		
ที่ "อายุ" มากกว่าหรือเท่ากับ 20 : [อายุ] >= 20
และ: And
ถ้า "เลขที่ทรัพย์สิน" ไม่ว่าง "วันที่คืนทรัพย์สิน" ต้องไม่ว่าง: [เลขที่ทรัพย์สิน] Not Is Null And [วันที่คืนทรัพย์สิน] Not Is Null
แต่: Or
ถ้า "เลขที่ทรัพย์สิน" ว่าง "วันที่คืนทรัพย์สิน" ต้องว่างด้วย: [เลขที่ทรัพย์สิน] Is Null And [วันที่คืนทรัพย์สิน] Is Null
โดย "วันยุติเรื่อง" ต้อง ว่างเสมอ: [วันยุติเรื่อง] Is Null
สรุปประมาณนี้ครับ
Select ...
From ...
Where [อายุ] >= 20
And
(
([เลขที่ทรัพย์สิน] Not Is Null) And ([วันที่คืนทรัพย์สิน] Not Is Null)
Or
([เลขที่ทรัพย์สิน] Is Null) And ([วันที่คืนทรัพย์สิน] Is Null)
)
And
[วันยุติเรื่อง] Is Null