SQL สำหรับกรณี … ถ้าไม่มีให้ Insert ถ้ามีให้ Update ถ้าเกินให้ Delete

บางครั้งเรามีข้อมูลอยู่ชุดหนึ่ง อยากจะ insert เข้าตาราง แต่จะสั่ง insert เลยเราก็ไม่แน่ใจว่าจะมี key ของบางเรคคอร์ดอยู่ในตารางปลายทางอยู่แล้วหรือเปล่า เพราะถ้ามีข้อมูลซ้ำกันแม้แต่เรคคอร์ดเดียวก็จะเกิด primary key violation และทำให้ insert ไม่สำเร็จ เราอยากให้มันดูเป็นรายบรรทัดได้ว่าปลายทางมี key นั้นๆ หรือยัง หากยังไม่มีจึงจะให้ insert หากมีอยู่แล้วก็ให้ update การดำเนินการลักษณะนี้เราเรียกว่าการ upsert (มาจากคำว่า update + insert) คือสามารถที่จะเลือก insert หรือ update ได้ตามแต่ว่าตารางปลายทางมี key นั้นอยู่แล้วหรือไม่
Read the rest of this entry »

SQL Query ในการดึงข้อมูลที่มีโครงสร้างเป็นแบบ hierarchy

สำหรับข้อมูลที่มีโครงสร้างเป็นแบบ hierarchy หรือโครงสร้างต้นไม้ เช่นผังองค์กร, สายบังคับบัญชา มักจะมีการตั้งคำถามว่า หน่วยงานนี้อยู่ในสังกัดหน่วยงานอะไรบ้าง หรือมีพนักงานคนใดอยู่ภายใต้การบังคับบัญชาของผู้จัดการคนนี้บ้าง เทคนิคการ query เพื่อหาคำตอบสำหรับข้อมูลแบบนี้ต้องใช้การเวียนเกิดหรือ recursion
Read the rest of this entry »

วิธีเขียน Query เพื่อ Select Top N ของ Group

สมมติว่าเรามีข้อมูลเป็นตาราง Customer ซึ่งมีฟิลด์ credit เป็นข้อมูลเครดิตลูกค้า และฟิลด์ province ซึ่งบอกจังหวัดของลูกค้า
เราอาจจะรู้วิธีเขียน query เพื่อดึงคนที่มีเครดิตสูงสุด N ลำดับแรกออกมา (Top N)
เราอาจจะรู้วิธีทำ aggregation บางอย่าง เช่นหาค่า Min, Max หรือ Average ของแต่ละกลุ่ม(ในที่นี้คือจังหวัด) ออกมา
แต่ถ้าโจทย์ของเราคือ หา Top N ของแต่ละกลุ่มออกมาล่ะ?
Read the rest of this entry »

ASP.NET Data Binding ภาคแรก One-way Binding: ตอนที่ 1 ข้อมูลเบื้องหลัง

ในการเขียนโปรแกรมแบบ Data Driven เทคนิคสำคัญที่โปรแกรมเมอร์จะไม่รู้ไม่ได้เลยคือเรื่องของ Data Binding
Data Binding ถ้าแปลตรงตัวก็แปลว่าการผูกข้อมูล ผูกเข้ากับอะไร ผูกเข้ากับ UI Control นั่นเอง
Data Binding ช่วยให้เราไม่จำเป็นต้องมานั่ง assign ค่าจากตัวแปรใส่ UI Control ทีละชิ้นๆ
Read the rest of this entry »

แจก Visual Studio Macro: Paste (as Double) Quote String

Post นี้แจก macro code สำหรับ visual studio ชื่อ PasteQuoteString
หน้าที่ของมันคือ ทำการ paste string ที่อยู่ใน clipboard ลงใน code ของเรา
โดยจะใส่ double quote ครอบไว้ให้ และใส่เครื่องหมาย string concatenate ให้ด้วย ในกรณีที่ string มีหลายบรรทัด
Read the rest of this entry »

การทำ Pivot Table กลาง Query ด้วย SQL Server 2005

Pivot Table หมายถึงลักษณะของตารางที่แสดงข้อมูลในเชิงวิเคราะห์ (Analytic) ไม่ใช่ข้อมูลดิบแบบ Transaction
จุดเด่นที่สังเกตได้ก็คือคอลัมน์ของ Pivot Table จะไม่ตายตัว แต่จะได้มาจากตัวเนื้อข้อมูล ต่างกับ Table ธรรมดา
ที่มักจะ fix คอลัมน์ไว้แล้วว่าประกอบด้วยข้อมูลอะไรบ้าง และตัวเลขใน Pivot Table ก็มักจะเป็นค่าที่สามารถวัดผล (Measure) ได้
โดยมากมักจะเป็นค่าที่เกิดจาก Aggregate function อย่างเช่น Sum, Avg, Max, Min เป็นต้น
Read the rest of this entry »

เพิ่มประสิทธิภาพการใช้ Linq to SQL ด้วย Load Option

การใช้ Linq to SQL เป็น Data Access Layer นั้นไม่เหมือนกับการเขียน SQL Query แบบเก่า ที่อยากจะ select ฟิลด์ของตารางที่ไป Join มาอย่างไรก็ได้ ตามแนวทางของ Linq to SQL นั้นเราจำเป็นต้องกำหนด Association ระหว่างแต่ละ Entity ให้ชัดเจน แล้วฟิลด์ที่เราจะนำมาแสดงผลก็มาจากการ Navigate ไปตาม Property ของ Entity Object ที่เป็น Association เหล่านี้
Read the rest of this entry »