ป้ายกำกับ: value

เลือกช่วงข้อมูลเลือกช่วงข้อมูล

ระบบที่ทำจะมีการตรวจสอบข้อมูลที่ป้อนเข้ามา โดยบังคับให้ป้อนข้อมูลเข้ามาตามค่าข้อมูลที่มีอยู่ แต่ถ้าจะต้องมา loop เช็กว่าข้อมูลตัวนี้มีในฐานข้อมูลรึเปล่า ก็เสียเวลาและเปลืองทรัพยากร จากการสังเกตข้อมูลจะอยู่เป็นช่วง ๆ เช่น 1 – 5, 8 – 12, 1982 – 2016

ถ้ารู้ช่วงข้อมูล ก็จะตรวจได้ว่าข้อมูลที่ป้อนเข้ามาอยู่ในช่วงที่กำหนดหรือไม่

ไปเจอ Select a range of values ลองแก้ตามได้

WITH Grouped AS (-- Identify groups SELECT D.bank_id, grp = D.bank_id - ROW_NUMBER () OVER (ORDER BY D.bank_id) FROM banks AS D) SELECT STUFF ( (-- Concatenate items in the current group SELECT [text () ] = ',' + CONVERT (varchar (11) , G2.bank_id) FROM Grouped AS G2 WHERE G2.grp = Grouped.grp ORDER BY G2.bank_id FOR XML PATH ('')) -- Remove initial comma , 1, 1, '') FROM Grouped
GROUP BY Grouped.grp;

ผลลัพธ์
1,2,3,4,5,6
8,9,10,11,12,13,14
16,17,18,19,20,21,22,23,24,25,26,27,28,29
31,32,33,34,35,36,37,38,39,40
43,44

ได้เป็นกลุ่มก็จริงแต่ อยากได้ id เริ่มต้นถึง id สุดท้ายของแต่ละกลุ่มเท่านั้น ลองแก้มั่ว ๆ ดู

WITH Grouped AS (SELECT D.bank_id, grp = D.bank_id - ROW_NUMBER () OVER (ORDER BY D.bank_id) FROM banks AS D) SELECT MIN (Grouped.bank_id) AS start_id, MAX (Grouped.bank_id) AS end_id
FROM Grouped
GROUP BY Grouped.grp

ผลลัพธ์
start_id end_id
———– ———–
1 6
8 14
16 29
31 40
43 44

ได้ตามที่ต้องการเลย