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

Đề tài: làm thế nào để select 1 bảng mà có cột sẽ có giá trị select từ 1 bảng khác??

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    175

    Mặc định làm thế nào để select 1 bảng mà có cột sẽ có giá trị select từ 1 bảng khác??

    mình có 3 bảng: - nhanvien(manv, ten,..) - nhanvien_nhom (manv,manhom) - nhom (manhom,..) Giờ mình muốn đưa ra 1 gridview(winform) với thông tin của bảng nhanvien và có thêm 1 cột nữa là nhóm(để biết nhân viên đó thuộc những nhóm nào). Mình không biết phải truy vấn sql thế nào và chỉnh grid thế nào để hiện ra đúng như mình muốn.Mong các bạn giúp

    ý mình muốn xuất ra dạng thế này:

    mã nv tên nv nhóm
    001 A nhóm 1, nhóm 2
    002 B nhóm 2, nhóm 3

    Mình cũng nghĩ tới việc viết function nhưng lại bị rối chỗ không biết làm thể nào để viết vòng lặp for hơặc foreach trong sql hết. Mong các bạn hướng dẫn. THANKS ALL

  2. #2
    Ngày gia nhập
    06 2011
    Bài viết
    93

    Viết như thế này thữ đi

    SQL Code:
    1. SELECT manv AS [mã nv], tennv AS [tên nv],
    2.           (SELECT t3.tennhom + ','
    3.               FROM nhanvien_nhom t2
    4.              INNER JOIN nhom t3 ON t2.manhom = t3.manhom
    5.             WHERE t2.manv = t1.manv ORDER BY t3.tennhom
    6.                  FOR xml path ('')) AS [nhóm]
    7.    FROM nhanvien t1

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

    SElect nv.* nhom.MaNhom
    From NhanVien nv, NhanVien_Nhom nhom
    Where nv.MaNhanVien=nhom.MaNhanVien
    And.....

    Trên code chạy câu truy vấn này. Khai báo 1 Datatable rồi fill về đó. Gắn Datasource lên Grid. hết
    bongda24h.tv

  4. #4
    Ngày gia nhập
    04 2009
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi FlyingFox Xem bài viết
    Viết như thế này thữ đi

    SQL Code:
    1. SELECT manv AS [mã nv], tennv AS [tên nv],
    2.           (SELECT t3.tennhom + ','
    3.               FROM nhanvien_nhom t2
    4.              INNER JOIN nhom t3 ON t2.manhom = t3.manhom
    5.             WHERE t2.manv = t1.manv ORDER BY t3.tennhom
    6.                FOR xml path ('')) // Bạn giải thích giúp mình chỗ này được không???
    7.    FROM nhanvien t1
    Mình không hiểu vì sao phải có for xml ... nó mới chạy. Và làm sao bỏ dấu "," ở cuối cùng được?

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

    Trích dẫn Nguyên bản được gửi bởi FlyingFox Xem bài viết
    Viết như thế này thữ đi

    SQL Code:
    1. SELECT manv AS [mã nv], tennv AS [tên nv],
    2.           (SELECT t3.tennhom + ','
    3.               FROM nhanvien_nhom t2
    4.              INNER JOIN nhom t3 ON t2.manhom = t3.manhom
    5.             WHERE t2.manv = t1.manv ORDER BY t3.tennhom
    6.                  FOR xml path ('')) AS [nhóm]
    7.    FROM nhanvien t1
    có cần phải phức tạp vậy không

    chỉ cần

    select n.manv,n.tennv,nhom.tennhom from nhanvien n,nhanvien_nhom nn,nhom nh
    where n.manv=nn.manv and nn.manhom = nh.manhom

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

    Mặc định làm thế nào để select 1 bảng mà có cột sẽ có giá trị select từ 1 bảng khác??

    Trích dẫn Nguyên bản được gửi bởi cannhiala Xem bài viết
    có cần phải phức tạp vậy không

    chỉ cần

    select n.manv,n.tennv,nhom.tennhom from nhanvien n,nhanvien_nhom nn,nhom nh
    where n.manv=nn.manv and nn.manhom = nh.manhom
    Đọc kỹ yêu cầu của đề bài

    Trích dẫn Nguyên bản được gửi bởi xiaoku Xem bài viết
    Mình không hiểu vì sao phải có for xml ... nó mới chạy. Và làm sao bỏ dấu "," ở cuối cùng được?
    SELECT ... FOR XML là một phương tiện của SQL Server (kể từ phiên bản 2005) dùng để gom kết quả lại thành một chuỗi XML.

    Đáng lẽ chuỗi XML phải đóng dữ liệu giữa hai thẻ tags nhưng trong trường hợp này, ta dùng path để mặc định thẻ tag là trống ('')

    Vì phép cộng có ép dấu phẩy ở phía sau nên kết quả luôn luôn như vậy. Nếu muốn bỏ dấu phẩy đi thì dùng hàm string (substring, left, stuff)

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

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Nếu muốn bỏ dấu phẩy đi thì dùng hàm string (substring, left, stuff)
    SQL Code:
    1. SELECT manv AS [mã nv], tennv AS [tên nv],
    2.            STUFF(SELECT ',' + t3.tennhom
    3.               FROM nhanvien_nhom t2
    4.              INNER JOIN nhom t3 ON t2.manhom = t3.manhom
    5.             WHERE t2.manv = t1.manv ORDER BY t3.tennhom
    6.                FOR xml path ('')), 1, 1, '') AS [nhóm]
    7.    FROM nhanvien t1

  8. #8
    Ngày gia nhập
    04 2009
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi FlyingFox Xem bài viết
    SQL Code:
    1. SELECT manv AS [mã nv], tennv AS [tên nv],
    2.            STUFF(SELECT ',' + t3.tennhom
    3.               FROM nhanvien_nhom t2
    4.              INNER JOIN nhom t3 ON t2.manhom = t3.manhom
    5.             WHERE t2.manv = t1.manv ORDER BY t3.tennhom
    6.                FOR xml path ('')), 1, 1, '') AS [nhóm]
    7.    FROM nhanvien t1
    thanks bạn nhé. đúng như ý mình muốn

  9. #9
    Ngày gia nhập
    04 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Đọc kỹ yêu cầu của đề bài



    SELECT ... FOR XML là một phương tiện của SQL Server (kể từ phiên bản 2005) dùng để gom kết quả lại thành một chuỗi XML.

    Đáng lẽ chuỗi XML phải đóng dữ liệu giữa hai thẻ tags nhưng trong trường hợp này, ta dùng path để mặc định thẻ tag là trống ('')

    Vì phép cộng có ép dấu phẩy ở phía sau nên kết quả luôn luôn như vậy. Nếu muốn bỏ dấu phẩy đi thì dùng hàm string (substring, left, stuff)
    Gom kết quả lại thành một chuỗi XML để làm gì hả bạn? Thanks

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

    Trích dẫn Nguyên bản được gửi bởi phuochantien Xem bài viết
    Gom kết quả lại thành một chuỗi XML để làm gì hả bạn? Thanks
    Một báo cáo luôn luôn dựa trên đăc trưng của thiết kế dữ liệu và yêu cấu của trình bày dữ liệu.
    Đăc trưng của bài là một nhân viên có thể thuộc về nhiều nhóm
    Yêu cầu của bài là liệt kê nhân viên và các nhóm mà nhân viên thuộc về.

    Dùng cách JOIN đơn giản (theo cannhiala) thì kết quả sẽ liệt kê mỗi dòng một cột nhân viên và một cột nhóm. Nếu nhân viên nằm trong n nhóm thì kết quả sẽ liệt kê ra n dòng cho nhân viên này.

    Tuy nhiên bài yêu cẩu mỗi nhân viên chỉ được liệt ra một dòng thôi, và cột nhóm sẽ là cột các nhóm. Tức là nếu nhân viên nằm trong n nhóm thì kết quả vẫn liệt kê ra 1 dòng cho nhân viên này, và cột các nhóm sẽ là một chuỗi chứa n nhóm.

    Trong ngữ cảnh (context) của bài này thì dùng chuõi XML chỉ là một thủ thuật để nối nhiều trị 'nhóm' lại thành một chuỗi.

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

  1. Lập trình C++ Hỏi về giá trị của biến ngay lúc mới khai báo
    Gửi bởi keomut123_456 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-11-2013, 12:41 AM
  2. Làm thế nào để thực thi 1 chương trình khác trong VC++ ?
    Gửi bởi kimhieu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 16-12-2012, 11:23 PM
  3. Làm ẩn icon của tiến trình khác trên traybar như thế nào ?
    Gửi bởi heroking_no1 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 17-10-2012, 10:26 AM
  4. Hiển thị giá trị trên Combobox khi truyền qua các form khác nhau ?
    Gửi bởi wintervt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 31-01-2012, 11:47 AM
  5. Tư vấn giải thể doanh nghiệp| giải thể chi nhánh 0903034381
    Gửi bởi thngxanhcty trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-09-2010, 04:18 PM

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