Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

THAM GIA ba bảng và tổng hợp dữ liệu từ nhiều hàng cho mỗi hàng DISTINCT trong cột riêng biệt

Giả sử rằng bạn không thể thay đổi cấu trúc dữ liệu để thực hiện một truy vấn hiệu quả hơn, điều này sẽ hoạt động:

--Populate sample data
SELECT 1 as key1,       2  as key2 INTO #tbl1
UNION ALL SELECT 1,       5 
UNION ALL SELECT 1,       6 
UNION ALL SELECT 1,       4 
UNION ALL SELECT 1,       8 

SELECT 1  as key1,     'Desc short' as shortkeydesc INTO #tbl2

SELECT 1   as key1,    'Desc a'  as [description] INTO #tbl3
UNION ALL SELECT 1,       'Desc c' 
UNION ALL SELECT 1,       'Desc aa' 
UNION ALL SELECT 1,       'Desc tt' 

--Combine data into semi-colon separated lists
SELECT 
key1
,STUFF(
    (
    SELECT
      ';' + CAST(t2.key2 AS VARCHAR(10))
    FROM #tbl1 t2
    WHERE t2.key1 = tbl1.key1
    FOR XML PATH('')
    ), 1, 1, ''
  )
,STUFF(
    (
    SELECT
      ';' + tbl2.shortkeydesc
    FROM #tbl2 tbl2
    WHERE tbl2.key1 = tbl1.key1
    FOR XML PATH('')
    ), 1, 1, ''
  )
,STUFF(
    (
    SELECT
      ';' + tbl3.[description]
    FROM #tbl3 tbl3
    WHERE tbl3.key1 = tbl1.key1
    FOR XML PATH('')
    ), 1, 1, ''
  )
FROM #tbl1 tbl1
GROUP BY tbl1.key1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để chọn các thực thể từ bảng thay đổi lịch sử

  2. Chọn một cột nếu cột khác rỗng

  3. 11 cách lấy khóa chính trong SQL Server (ví dụ T-SQL)

  4. Cho phép người dùng chuyển tên bảng và tên cột trong khi ngăn chặn việc đưa vào SQL

  5. echo hình ảnh theo một điều kiện