Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Gộp nhiều dòng từ kết quả query thành 1 dòng

  1. #1
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định Gộp nhiều dòng từ kết quả query thành 1 dòng

    Đôi khi bạn muốn gộp nhiều row thu được thành 1 query thì có 1 số cách khá hay trong Sql.
    Chẳng hạn,tôi có 1 table (tên : Baggage) đơn giản như sau :

    Database Code:
    1. PassengerID         OSTag
    2. 2145              BMV123456
    3. 2145              BMV234567
    4. 2145              BMV123789
    5. 2145              BMV124654
    6. 2145              BMV456234
    7. 2145              BMV908567
    8. 5437              DAD676776
    9. 5437              DAD989898
    10. 5437              DAD787656
    11. 5452              DAD123456

    Bạn muốn thu được kết quả như sau :

    Result Code:
    1. PassengerID     OSTag
    2. 2145            BMV123456,BMV234567,BMV123789,BMV124654,BMV456234,BMV908567,
    3. 5437            DAD676776,DAD989898,DAD787656,
    4. 5452            DAD123456,

    nghĩa là gộp những OSTag của cùng 1 PassengerID vào 1 row và cách nhau bởi dấu " , ". Các bạn có thể viết query như sau :

    SQL Code:
    1. SELECT DISTINCT
    2.         bag2.PassengerID,
    3.         (   SELECT bag1.OSTag +',' AS [text()]
    4.             FROM REZP8OD01.dbo.Baggage bag1
    5.             WHERE bag1.PassengerID=bag2.PassengerID
    6.             ORDER BY bag1.PassengerID
    7.             FOR XML PATH(''))[OSTag]
    8.     FROM dbo.Baggage bag2

    Chúc thỏa mãn
    Đã được chỉnh sửa lần cuối bởi dieucay555 : 17-02-2011 lúc 08:50 PM.
    Cánh Chym ứ mỏi

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Thủ thuật rất hay. Xin cho phép góp ý một chút:

    [text()] là ký hiệu đặc biệt báo cho XML builder biết rằng cột này là cột không có tên. Nếu không có ký hiệu này, và cột lấy ra từ một trường nguyên thủy, XML builder sẽ dùng tên trường để tạo thẻ bọc dữ liệu <OSTag>BMV123456</OSTag>

    Tuy nhiên, vì cột của bạn là cột tính /calculated (do con toán cộng dấu phẩy ',' ) nên tự nó đã không có tên rồi.

    Nói cách khác, trường hợp trong ví dụ có thể bỏ đi từ "AS [text()]".

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    5

    Cho mình hỏi thêm tại sao khi sử dụng dòng lệnh SQL như trên trong access thì bị báo lổi ở phần
    FOR XML PATH('')

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Select for XML là lệnh riêng của T-SQL, Access không có.

  5. #5
    Ngày gia nhập
    07 2009
    Bài viết
    2

    Wink Gộp nhiều dòng từ kết quả query thành 1 dòng

    Xin hỏi chủ topic có thể gộp từ nhiều bảng được không ví dụ như quan hệ n ** n thì phải qua 3 bảng thì sao?
    Mong nhận được hồi âm từ các bác

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định Gộp nhiều dòng từ kết quả query thành 1 dòng

    Tùy theo chiều truy cứu. Nếu truy cứu đúng 1 chiều thì N-N cũng in hệt nhú 1-N

    Truy cứu cả 2 chiều thì rất khó xác định một cách tổng quát. Phải cho biết cụ thể thiết kế bảng và yều cầu truy vấn.

  7. #7
    Ngày gia nhập
    05 2011
    Bài viết
    17

    công nhận dieucay555 cao thủ SQL giống như VOTICHSU

  8. #8
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Mặc định Access thì sao anh

    select a1.MaSinhVien, (select a2.MaDoiTuong + ',' as [text()] from REZP8OD01.ChiTietDoiTuong a2 where a2.MaSinhVien=a1.MaSinhVien) as DT from ChiTietDoiTuong a1

    >> at most one record can be returned by thí subquery @@ chém nó giúp em cái @@

  9. #9
    Ngày gia nhập
    07 2013
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi dieucay555 Xem bài viết
    Đôi khi bạn muốn gộp nhiều row thu được thành 1 query thì có 1 số cách khá hay trong Sql.
    Chẳng hạn,tôi có 1 table (tên : Baggage) đơn giản như sau :

    Database Code:
    1. PassengerID         OSTag
    2. 2145              BMV123456
    3. 2145              BMV234567
    4. 2145              BMV123789
    5. 2145              BMV124654
    6. 2145              BMV456234
    7. 2145              BMV908567
    8. 5437              DAD676776
    9. 5437              DAD989898
    10. 5437              DAD787656
    11. 5452              DAD123456

    Bạn muốn thu được kết quả như sau :

    Result Code:
    1. PassengerID     OSTag
    2. 2145            BMV123456,BMV234567,BMV123789,BMV124654,BMV456234,BMV908567,
    3. 5437            DAD676776,DAD989898,DAD787656,
    4. 5452            DAD123456,

    nghĩa là gộp những OSTag của cùng 1 PassengerID vào 1 row và cách nhau bởi dấu " , ". Các bạn có thể viết query như sau :

    SQL Code:
    1. SELECT DISTINCT
    2.         bag2.PassengerID,
    3.         (   SELECT bag1.OSTag +',' AS [text()]
    4.             FROM REZP8OD01.dbo.Baggage bag1
    5.             WHERE bag1.PassengerID=bag2.PassengerID
    6.             ORDER BY bag1.PassengerID
    7.             FOR XML PATH(''))[OSTag]
    8.     FROM dbo.Baggage bag2

    Chúc thỏa mãn
    anh cho em hỏi làm thế nào để thêm điều kiện nếu là item cuối cùng thì ko có dấu "," nữa ạ. Ví dụ như của anh:
    PassengerID OSTag
    2145 BMV123456,BMV234567,BMV123789,BMV124654,BMV456234, BMV908567
    5437 DAD676776,DAD989898,DAD787656
    5452 DAD123456

Các đề tài tương tự

  1. Chọn nhiều dòng chỉ lưu được 1 dòng
    Gửi bởi catsalem trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 07-05-2013, 06:27 PM
  2. Thêm nhiều dòng trong Datagridview c# Bằng duyệt qua từng dòng và thực thi thủ tục
    Gửi bởi phuclieu90 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 07-06-2012, 01:10 PM
  3. Database Làm sao get data trong bảng dòng từng dòng theo số dòng i
    Gửi bởi theClassicMan27 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 26-04-2012, 01:17 AM
  4. Lập trình C++ Cout ra hai dòng cho kết quả khác khi gộp vào 1 dòng
    Gửi bởi kh0c trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 20-05-2011, 09:24 PM
  5. Nên viết 1 dòng code dài trên 1 dòng hay trên nhiều dòng??
    Gửi bởi longtth trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 25-10-2010, 01:07 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn