Ghép Nối Nhiều Bản Ghi Vào Một Dòng

Ví dụ bạn có bảng:
ProductID CustomerName
---------- -------------
1          Tuấn
1          Minh
1          Linh
2          Ngọc
2          Hiền

Bạn muốn kết quả ra như sau:
ProductID CustomerName
---------- -------------
1          Tuấn, Minh, Linh
2          Ngọc, Hiền

Bạn có thể dùng câu lệnh này:

SELECT DISTINCT C2.ProductID, 
    SUBSTRING(
        (
            SELECT ','+C1.CustomerName  AS [TEXT()]
            FROM dbo.Customer C1
            WHERE C1.ProductID = C2.ProductID
            ORDER BY C1.ProductID
            FOR XML PATH ('')
        ), 2, 1000) CustomerList
FROM dbo.Customer C2

Trường hợp bạn không cần group by ProductID mà chỉ cần một danh sách khách hàng nối với nhau, bạn có thể dùng câu lệnh đơn giản hơn sau:

DECLARE @NAMES NVARCHAR(4000) 
SELECT @NAMES = COALESCE(@NAMES + ', ', '') + CustomerName 
FROM dbo.Customer
SELECT @NAMES
Posted on 18/12/2014 by Vũ Huy Tâm | Categories: SQL Server Programming, Tip & Trick

Log File Để Làm Gì

Khi bạn dùng Microsoft Word, bạn để ý thấy có một file tạm nằm cùng trong folder với file chính. Nếu windows bị shutdown đột ngột file tạm vẫn nằm ở đó, còn khi bạn soạn thảo xong và đóng Word lại thì file đó tự động bị xóa. File tạm này dùng cho các chức năng như autosave, recovery khi bị đóng đột ngột, undo… Log file trong SQL Server cũng có chức năng giống như file tạm đó, nhưng ở mức tinh vi hơn. Nó đóng góp rất nhiều vai trò trong tính năng ACID của hệ thống (ACID = Atom – nguyên tử, Consistency – toàn vẹn, Isolation – cô lập, và Durability – bền bỉ). Với Word thì đó chỉ là tính năng tiện lợi cho người dùng, còn với SQL Server thì đó là cam kết của hệ thống đối với dữ liệu và các giao dịch thực hiện trên nó.
Khi nhận được một lệnh cập nhật dữ liệu, các bước sau sẽ xảy ra bên trong hệ thống: … đọc tiếp »

Posted on 31/10/2014 by Vũ Huy Tâm | Categories: Bên trong SQL Server, Database Administration

Ứng Dụng của Join Bất Cân Bằng

Tiếp theo bài viết Cẩn thận với Join bất cân bằng, bài viết này mô tả một trường hợp thường gặp có thể xử lý bằng Join bất cân bằng (còn được gọi bằng Non Equi-Joins).
Đó là những bài toán liên quan đến cách tính bậc thang.
Ví dụ giá điện dùng trong khoảng 0-100 thì áp mức giá 100 cho 1 số, từ 101 – 200 lại áp mức giá 200. Cần tính tiền cho từng khách hàng với số điện dùng trong tháng.
Hoặc trong viễn thông, áp giá cho cuộc gọi từ 0-10 giây đầu là 1 đồng, từ giây thứ 11 là 2 đồng… Trong bưu chính, khối lượng hàng hóa từ 0-200g thì mức giá là 1000 đồng, từ 200-400g là 2000 đồng…
Để giải quyết bài toán này có nhiều cách, một trong số những cách thức hiệu quả là sử dụng Join bất cân bằng vì những ưu điểm sau:
- Xử lý hàng loạt, không sử dụng Cursor
- Có thể cài đặt bằng SQL, thuận tiện khi triển khai trên những hệ thống khác ngoài SQL Server như Oracle, MySQL…

MÔ TẢ BẢNG … đọc tiếp »

Posted on 29/9/2014 by Guess Post: Vũ Minh Tâm | Categories: SQL Server Programming

Cẩn Thận Với Join Bất Cân Bằng

Thông thường khi viết lệnh JOIN, trong biểu thức ở mệnh đề join bạn dùng toán tử “=”. Kiểu join này tạm gọi là join cân bằng, còn kiểu join tạm gọi là bất cân bằng là khi biểu thức ở mệnh đề join dùng các toán tử bất cân bằng như >, < , !=... … đọc tiếp »

Posted on 10/9/2014 by Vũ Huy Tâm | Categories: SQL Server Programming

Kinh Nghiệm Phỏng Vấn

Đây là một trong loạt bài về kinh nghiệm xin việc, bài trước nói về kinh nghiệm viết resume. Giống như bài trước, bài này cũng chỉ dựa vào những kinh nghiệm cá nhân của tôi trong thời gian làm việc tại Mỹ. Nếu bạn thấy có gì không phù hợp với hoàn cảnh ở Việt nam hoặc muốn bổ sung điều gì, xin hãy comment ở bên dưới.

Một resume bắt mắt giống như một miếng mồi ngon, thể nào cũng sẽ có vài công ty gọi đến và muốn phỏng vấn bạn (cá bắt đầu lượn lờ). Thông thường công ty sẽ phỏng vấn nhanh qua điện thoại trước để kiểm tra đúng người thực và có các kỹ năng như viết trong resume. Sau đó nếu mọi chuyện suôn sẻ họ sẽ mời bạn đến phỏng vấn (cá bắt đầu ngửi hít).

Khi đi phỏng vấn, bạn cũng cần giữ nguyên tinh thần như lúc viết resume: tôi toàn làm những việc quan trọng và giờ tôi đi tìm một công việc quan trọng hơn.

Buổi phỏng vấn thường bắt đầu bằng … đọc tiếp »

Posted on 21/8/2014 by Vũ Huy Tâm | Categories: Linh tinh

Viết Resume Xin Việc Như Thế Nào

Mình đã trải qua vài lần đi phỏng vấn xin việc và ngồi phỏng vấn các bạn đến xin việc. Mình cũng đã phải kỳ cạch ngồi viết resume cho mình và đọc hàng trăm resume của các bạn ứng viên. Mình phát hiện ra một vài lỗi trong resume rất nhiều bạn mắc phải, những lỗi này nếu để ý sửa được sẽ làm cho resume trông chuyên nghiệp và tạo ấn tượng tốt cho người đọc. Mặc dù các kinh nghiệm này là ở Mỹ, mình tin là nó có giá trị phổ cập. Đây là một trong loạt bài về kinh nghiệm xin việc, bài kia nói về kinh nghiệm phỏng vấn.

 

Giải phẫu một cái resume

Resume (hoặc còn gọi là CV) có một nguyên tắc chung là toàn bộ nội dung phải là các gạch đầu dòng và mỗi gạch đầu dòng chỉ là một đoạn ngắn không quá 3 dòng. Nếu bạn viết liền một đoạn 5-7 câu thì người đọc sẽ phát chán. Một nguyên tắc nữa là trang đầu tiên phải chứa hết các thông tin bạn muốn người ta đọc, vì thế bạn phải đưa các thông tin quan trọng nhất vào trang đầu tiên, các trang sau chỉ là để thêm thắt cho đầy đủ.

Resume không có khuôn mẫu cố định nhưng thường bắt đầu bằng thông tin cá nhân (tên, địa chỉ liên lạc) và tiếp theo gồm các phần như sau: … đọc tiếp »

Posted on 20/8/2014 by Vũ Huy Tâm | Categories: Linh tinh

Cấu Hình SQL Server Để Gửi Mail

Bài này nói về cách gửi email trong SQL Server bằng chức năng Database Mail. Chức năng cũ SQL Mail không còn được hỗ trợ nữa.
Việc đầu tiên là bạn cần bật chức năng Database Mail, bằng đoạn code sau:

SP_CONFIGURE 'show advanced options', 1;
GO
RECONFIGURE;
GO
SP_CONFIGURE 'Database Mail XPs', 1;
GO
RECONFIGURE
GO

Sau đó trong Management Studio, … đọc tiếp »

Posted on 18/8/2014 by Vũ Huy Tâm | Categories: Database Administration

Thiết Lập Cho xp_cmdshell

SQL Server là hệ quản trị dữ liệu, khả năng chính của nó là lưu trữ và truy xuất dữ liệu. Tuy nhiên đôi lúc bạn cần thực hiện một số thao tác của windows từ SQL Server, ví dụ khi bạn cần viết sql script để copy file từ folder này sang folder khác; hoặc tự động restore từ file backup mới nhất dựa theo ngày tạo (tên file không biết trước). SQL Server cung cấp thủ tục xp_cmdshell trong master database để làm việc này.
Để có thể gọi đến xp_cmdshell đòi hỏi một vài bước thiết lập.
Nếu bạn là DBA với quyền sysadmin, bạn cần cấu hình lại server để bật xp_cmdshell (khi SQL Server mới cài đặt tính năng này bị tắt): … đọc tiếp »

Posted on 14/3/2014 by Vũ Huy Tâm | Categories: Bảo mật, Database Administration, Uncategorized

[LINH TINH] Từ Vựng Lớp 3

Con trai mình học lớp 3, thấy có bảng từ có mấy từ khá khó. Không nói về ngôn ngữ tiếng Anh hay tiếng Việt, nhưng những khái niệm khá trừu tượng như estimate (ước lượng), tone (giọng điệu của một bài viết), hay generalization (khái quát hóa). Hồi lớp 3 của mình thì chắc chưa được học mấy cái này (dù bằng tiếng Việt). Không biết trẻ con ở VN giờ học thế nào?
Hỏi thêm: có từ nào bạn chưa biết? (Xem ảnh dưới) … đọc tiếp »

Posted on 28/2/2014 by Vũ Huy Tâm | Categories: Linh tinh