2011-11-28 29 views
18

Tôi cần trả lại các bản ghi trên bảng và tập kết quả của tôi cần chứa danh sách được phân cách bằng dấu phẩy.truy vấn phụ máy chủ sql với một kết quả được phân cách bằng dấu phẩy

Tôi đã đính kèm hình ảnh của 3 bảng. Tôi cần phải làm một lựa chọn trả về bản ghi trong bảng đầu tiên và bao gồm phần cuối của AwardFocusName tồn tại trong bảng thứ 3 trong ảnh chụp màn hình.

Vì vậy, tập hợp kết quả của tôi sẽ trả lại một bản ghi và bao gồm danh sách các giải thưởngFocusNames trong đó (được phân cách bằng dấu phẩy).

enter image description here

+0

Tên bảng là gì? – ManseUK

+0

Tên bảng là Đề cử, Giải thưởng tập trung, Đề cửAwardFocus (theo thứ tự chúng xuất hiện trong ảnh chụp màn hình). – obautista

Trả lời

43

Dưới đây là một thủ thuật tôi đã sử dụng trong quá khứ để làm những điều tương tự

 

    SELECT n.nominationID 
     , SUBSTRING((
          SELECT ',' + af.awardFocusName 
          FROM NominationAwardFocus naf 
          JOIN AwardFocus af 
           ON naf.awardFocusID = af.awardFocusID 
          WHERE n.nominationID = naf.nominationID 
          FOR XML PATH('') 

         ), 2, 1000000) 
    FROM Nomination n 

+1

Bạn nên thử điều này với 'awardFocusName' chứa' & '. Nó không đẹp. –

+0

Tôi đã gặp sự cố và vấn đề, nhưng REPLACE đơn giản đã giải quyết được vấn đề. – Hagelt18

+0

câu trả lời xuất sắc! – jhilden

1

Tôi nghĩ rằng giải pháp tốt nhất là để tạo ra một Người dùng xác định tổng hợp mà concatenates các giá trị (trong một nhóm) vào một danh sách dấu phẩy tách ra. Xem Ví dụ 1 tại địa chỉ: http://msdn.microsoft.com/en-us/library/ms131056.aspx

Cách sử dụng:

SELECT 
    Nomination.NominationId, 
    Nomination.Created, 
    Nomination.Updated, 
    dbo.Concatenate(AwardFocus.AwardFocusName) As Names 
FROM 
    Nomination 
    JOIN NominationAwardFocus 
     ON Nomination.NominationId = NominationAwardFocus.NominationId 
    JOIN AwardFocus 
     ON NominationAwardFocus.AwardFocusId = AwardFocus.AwardFocusId 
GROUP BY 
    Nomination.NominationId, 
    Nomination.Created, 
    Nomination.Updated 
1

Tạo chức năng có giá trị vô hướng như thế này

CREATE FUNCTION [dbo].[CreateCSV](
    @Id AS INT 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    Declare @lst varchar(max) 

    select @lst = isnull(@lst+',','')+AF.AwardFocusName 
    from AwardFocus as AF 
    inner join AwardFoccusNomination as AFN 
     on AF.AwardFocusID = AFN.AwardFocusID 
    where [email protected] 


    return @lst 

END 
Các vấn đề liên quan