บทความ

กำลังแสดงโพสต์จาก พฤศจิกายน, 2009

SQL Command Convert multiple rows to one row csv format

ไม่แน่ใจว่า แต่ละท่านเคยเจอ โจทย์แบบว่า แปลง ข้อมูลจากที่เก็บข้อมูล เป็น row base แปลงเป็น 1 column โดย ให้ขั้นข้อมูลระหว่าง row ด้วย comma หรือไม่ เช่น ตัวอย่าง การหาว่า แต่ละวัน มีการขายสินค้าอะไรไปบ้าง สรุปเป็นวันๆ โดยในวันนั้นๆ ให้แสดง ผลว่า มีรายการสินค้าอะไรบ้าง ในรูปแบบ รหัสสินค้า คั่น ด้วย comma คล้ายๆ csv format (comma separate value) ข้อมูลต้นฉบับ เก็บเป็น record จำนวน 1 record เก็บข้อมูลดังนี้ วันที่ | รหัสสินค้า|จำนวน 1/2/09 | 1 | 5 2/2/09 | 1 | 10 1/2/09 | 2 | 10 2/2/09 | 2 | 15 1/2/09 | 3 | 10 2/2/09 | 3 | 10 3/2/09 | 3 | 10 1/2/09 | 4 | 10 อยากได้ผลลัพธ์ สรุปเป็น วันๆ ดังนี้ วันที่ | รหัสสินค้า 1/2/09 | 1,2,3,4 , 2/2/09 | 1,2,3 , 3/2/09 | 3 , วิธีการทำก็คือ การ select ข้อมูลให้อยู่ในรูปแบบ string หรือ (varchar,nvarchar) ขนาดใหญ่ โดยให้คุณเขียน function มา 1 ตัว ในการ แปลง multirow เป็น one row csv format กรณี SQL 2005 สามารถใช้ SELECT FOR XML PATH ไ...

Function DateFormat สำหรับ Crystal Report 2008

ในการ เขียน report ต้องมีอยู่แล้ว ว่าต้องการ set format วันที่ให้เป็นไปตามต้องการ โดยไม่ต้องไม่ยุ่งกับ regional setting แน่นอนต้องเขียนขึ้นมาใช้เอง เพราะว่า function ใน crystal report มัน ไม่ได้เขียนมาเพื่อคนไทย ดังนั้น อยากได้แบบไหนก็ต้องเขียนเอง ตัวอย่าง ที่ผมจะนำมาให้ดู ก็เป็น function date format รับ parameter 3 ตัว คือ 1. วันที่ (วันที่ ที่ต้องการแปลง) 2. รูปแบบ (รูปแบบที่ต้องการ) 3. ตัวคั่น (ตัวคั่น ระหว่าง วัน เดือน ปี) มาดู Code กันเลยครับ Function ( datevar d, StringVar style, StringVar separator ); ( // Crystal Report Custom function // Date String // By Narong Sungkhamalai SELECT (style) //American Long CASE "al" : ( Select ( Month (d)) Case 1 : "January" Case 2 : "February" Case 3 : "March" Case 4 : "April" Case 5 : "May" Case 6 : "June" ...

T-SQL, Function End of Month

เหมือนเดิม function ที่น่าจะต้องใช้บ่อยๆ ครับ คือ function End Of Month หรือ หาวันสิ้นเดือน ครับ ก็ไม่ยากอะไรหรอกครับ แต่มันก็ใช้บ่อยๆ เขียนไว้ใช้ ก็สะดวกดี ไม่จำเป็นต้องเขียนใหม่ทุกครั้ง สิ่งที่ต้องการ คือ ป้อน input เป็น วันที่ แล้ว return เป็น วันที่สิ้นเดือน ของเดือน นั้น หลักการที่ผมใช้คือ 1. หาวันที่ 1 ของเดือน ของวันที่ input 2. บวก ไป 1 เดือน ได้วันที่ 1 ของเดือนถัดไป 3. ลบ 1 วัน ได้วันสิ้นเดือน ของ วันที่ input แค่นี้ครับ ต่อไป มาดู code T-SQL กันครับ เอาตาม concept ที่ว่า ไม่ได้ พลิกแพลงอะไรมากครับ ส่วนใครจะเอาำไป optimize อย่างไร ไม่ว่ากัน อันนี้เป็น Code ของ SQL Server 2005 ใน code จะมีการ set เวลา ให้เป็น 0:00 ด้วยครับ CREAT FUNCTION [app_main].[fnEndOfMonth] ( @dateint smalldatetime ) RETURNS smalldatetime AS BEGIN -- Declare the return variable here DECLARE @DOut smalldatetime --for output date DECLARE @d int --for day DECLARE @h int --for hour DECLARE @m int --for minute -- Add the T-SQL statements to compute the retur...