Displaying rows as columns

Nhân hôm nay đại ca của mình hỏi về cách chuyển đổi từ ROWs sang Columns trong trường hợp số ROWS tĩnh, chắc cái này các bạn cũng thỉnh thoảng gặp trong Projects nên mình bốt ra đây để cùng “lồng bàn” nhé.

Để cho các bạn dễ hình dung mình show ví dụ nhé:
– Một bảng tbl_Nhanvien
– Một bảng tbl_Giaykhen (bảng này là bảng danh mục chỉ có 6 loại giấy khen)
– 2 bảng trên quan hệ theo kiểu nhiều nhiều nên theo lý thuyết chuẩn hoá của các GS râu rậm, tất yếu phải có một bảng tbl_Nhanvien_Giaykhen quan hệ với 2 bảng kia theo kiểu 1 – many

Nhân viên A có 6 cái giấy khen, nên bảng tbl_Nhanvien_Giaykhen sẽ có 6 bản ghi:
Ma Ten Giaykhen
1    A    GK1
1    A    GK2
1    A    GK3
1    A    GK4
1    A    GK5
1    A    GK6

Bây giờ mình cần hiển thị như thế này
1     A    GK1    GK2    GK3    GK4    GK5    GK6

What will you suggest?

Có nhiều cách để đến Roma, (nói đến đây lại nhớ tối nay Rùa – (MU rùa) đá với Rắn (Bạch Xà) ở Roma :)), mình cứ show ra đây để cho bạn không bảo là mình phét:
C1: Viết 1 Store Procedure, tính tính toán toán làm sao để ra khuôn dạng như trên là được
C2: Dùng hàm build-in như When case trong SQL server, Decode trong Oracle

Mình prefered cách 2. And you?

P/S: Hôm nay Rắn thằng Rùa 2 nháy rồi nên mình vào cập nhật thêm:  Trong trường hợp số Rows động thì làm thế nào? Mình nghĩ nếu chỉ là câu lệnh thuần tuý thì cũng khó mà làm, chắc lại phải dùng Store Procedure sử dụng crosstable để gen câu SQL thôi. Nếu để tạo các report thì dùng trực tiếp Matrix report của Oracle và Cross-Tab Report trong Crystal Report

HN

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: