ขอสอบถามเรื่องการเขียน SQL หน่อยครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

21 ก.พ. 63 , 12:09:53
อ่าน 989 ครั้ง

taeclubz

  • สมาชิกไท.Access
  • กระทู้: 7

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

อยากรบกวนผู้รู้เรื่อง SQL หน่อยครับ ว่าต้องเขียน โค้ดยังไง ว่าจะต้อง Where อะไรบ้าง

นี่คือตัวอย่าง table ที่จะนำมาพิจารณาเขียน Query ครับ



ผลลัพที่อยากได้คือ

EBELN             EBELP
7000002511        2
7000002511        3

หากข้อมูลเป็นแบบที่วงแดงไว้แบบนี้ คือฟิล VGABE มีค่าเป็น 2 จะไม่ถูกเลือกมาเลย



และหากข้อมูลซ้ำแบบนี้ ก็ให้หยิบมาบรรทัดเดียว



หรือถ้าเป็นไปได้ ก็อยากให้หยิบค่า ฟิล BELNR โดยเลือกจาก ฟิล BWART มีค่าเป็น 101 ดังตัวอย่างผลลัพด้านล่างนี้ครับ ( หากท่านใดเขียนได้ ขอบพระคุณมากครับ )

ผลลัพที่อยากได้คือ

EBELN             EBELP    BELNR
7000002511        2       8000000042
7000002511        3       8000000105

ขอบพระคุณมากครับ


 

21 ก.พ. 63 , 12:50:47
ตอบกลับ #1

PNR

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #1 เมื่อ: 21 ก.พ. 63 , 12:50:47 »
ไม่รู้แบบนี้ไหมนะครับ ผมสมมุติ table1 คือชื่อตารางนะ

โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR
FROM Table1
WHERE ((Not (Table1.VGABE)=2 And Not (Table1.VGABE)=[EBELP]) AND ((Table1.BWART)="101"));
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

21 ก.พ. 63 , 14:23:55
ตอบกลับ #2

taeclubz

  • สมาชิกไท.Access
  • กระทู้: 7

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #2 เมื่อ: 21 ก.พ. 63 , 14:23:55 »
ไม่รู้แบบนี้ไหมนะครับ ผมสมมุติ table1 คือชื่อตารางนะ

โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR
FROM Table1
WHERE ((Not (Table1.VGABE)=2 And Not (Table1.VGABE)=[EBELP]) AND ((Table1.BWART)="101"));

ลองนำโค้ดมาใช้ แล้วได้แบบนี้อ่าครับ  เกือบสมบูณณ์ละครับ แต่ต้องห้ามหยิบ รายการที่มี VGABE ค่า 2 ออกมาเลย ถึงแม้ว่าจะมีค่าทั้ง 1 , 2 และ BWART เป็น 101 ก็ตามครับ

EBELN              EBELP     BELNR
7000002511         1           8000000041
7000002511         2           8000000042
7000002511         3           8000000105

 

21 ก.พ. 63 , 14:34:39
ตอบกลับ #3

PNR

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #3 เมื่อ: 21 ก.พ. 63 , 14:34:39 »
ลองแบบนี้ึครับว่าได้ไหม 

คิวรี่แรกแบบนี้
โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR, Table1.VGABE, Table1.BWART
FROM Table1
WHERE (((Table1.VGABE)<>2 And (Table1.VGABE)<>[EBELP]) AND ((Table1.BWART)="101"));

คิวรี่ 2 แบบนี้
ชื่อคิวรี่แรก Query1

โค๊ด: [Select]
SELECT Query1.EBELN, Query1.EBELP, Query1.BELNR
FROM Query1;
« แก้ไขครั้งสุดท้าย: 21 ก.พ. 63 , 14:51:44 โดย PNR »
Time to stop for me  :dizzy:
 

21 ก.พ. 63 , 15:02:17
ตอบกลับ #4

taeclubz

  • สมาชิกไท.Access
  • กระทู้: 7

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #4 เมื่อ: 21 ก.พ. 63 , 15:02:17 »
ลองแบบนี้ึครับว่าได้ไหม 

คิวรี่แรกแบบนี้
โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR, Table1.VGABE, Table1.BWART
FROM Table1
WHERE (((Table1.VGABE)<>2 And (Table1.VGABE)<>[EBELP]) AND ((Table1.BWART)="101"));

คิวรี่ 2 แบบนี้
ชื่อคิวรี่แรก Query1

โค๊ด: [Select]
SELECT Query1.EBELN, Query1.EBELP, Query1.BELNR
FROM Query1;

ให้เขียนประมาณนี้ใช้ปะครับ

SELECT Q1.EBELN , Q1.EBELP, Q1.BELNR
FROM (
         SELECT TB1.EBELN ,TB1.EBELP ,TB1.BELNR ,TB1.VGABE ,TB1.BWART
         FROM TB1
         WHERE (((TB1.VGABE)<>2 And (TB1.VGABE)<>[EBELP]) AND ((TB1.BWART)="101"))
) Q1

แบบนี้ปะครับ ถ้าแบบนี้ผมลองแล้ว ก็ยังได้เหมือนเดิมครับ หรือไม่ต้องซ้อน select แบบนี้ครับ

 

24 ก.พ. 63 , 08:58:52
ตอบกลับ #5

PNR

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #5 เมื่อ: 24 ก.พ. 63 , 08:58:52 »
ยังไม่ได้ใช่ไหมครับ เดี่ยวผมลองใหม่แปป
Time to stop for me  :dizzy:
 

24 ก.พ. 63 , 18:49:31
ตอบกลับ #6

สันติสุข

: ขอสอบถามเรื่องการเขียน SQL หน่อยครับ
« ตอบกลับ #6 เมื่อ: 24 ก.พ. 63 , 18:49:31 »
ถ้าเลือกเฉพาะ BWART = '101' ก็ใช้

select EBELEN, EBELP, VGABE, GJAHR, First(BELNR), First(BUZEI), First(BEWTP), First(BWART)
from ชื่อเทเบิล
   where VGABE <> '2' and BWART = '101'
   group by EBELEN, EBELP, VGABE, GJAHR

แต่ถ้าเราใช้เกณฑ์ว่า ถ้าเจอค่า '101' ก็ให้เลือกเป็นลำดับแรก ส่วนค่าอื่นๆ ไม่ว่าจะมากกว่าหรือน้อยกว่า '101' จะเลือกตัวไหนมาก็ได้ อย่างนี้ถ้าใช้ SQL ล้วนๆตามข้างล่าง ผมไม่แน่ใจว่าผลลัพธ์จะได้ออกมาตามต้องการหรือไม่ เพราะมันไม่มีการกำหนดลำดับจัดเรียง ต้องทดสอบด้วยข้อมูลเยอะๆเอาเองครับ

select EBELEN, EBELP, VGABE, GJAHR, First(BELNR), First(BUZEI), First(BEWTP), First(BWART)
from (
   select *
   from ชื่อเทเบิล
   where VGABE <> '2' and BWART = '101'

   union all

   select *
   from ชื่อเทเบิล
   where VGABE <> '2'
)
group by EBELEN, EBELP, VGABE, GJAHR

หมายเหตุ : ทั้งหมดยังไม่ได้ทดสอบนะครับ อาจมี syntax error
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5