2011-09-15 132 views
0

我想返回一份員工列表,關於他們的各種信息以及一列列出他們每個月以逗號分隔的小時數的前3個項目名單。我有一個select語句成功返回小時,但我不確定如何將其嵌入到select statenet中。以下是select語句。我正在嘗試在SQL Server中執行此操作。逗號分隔列表作爲SQL SELECT結果的一部分

 DECLARE @Projects varchar(max) 
    SELECT Top(3) @Projects = COALESCE(@Projects+', ' ,'') + ltrim(rtrim(Projects.Title)) 
       FROM   EmployeeProjectPlanning INNER JOIN 
        Projects ON EmployeeProjectPlanning.ProjectID = Projects.ProjectID 
       WHERE  (EmployeeProjectPlanning.EmpID = 1) AND (EmployeeProjectPlanning.MonthID = 9) AND (EmployeeProjectPlanning.Year = 2011) 
       ORDER BY EmployeeProjectPlanning.Hours DESC 
    SELECT @Projects 
+3

請,請,請告訴我們您所使用的SQL產品。 MySQL和SQLite會用GROUP_CONCAT來做到這一點,在SQL Server中,您需要編寫一個標量存儲過程來執行此操作。 –

+0

由語法判斷,它是MS SQL。另外,我發現爲此目的創建一個聚合CLR函數是有用的,如果訪問權限允許的話,它可以模仿MySQL的group_concat。 – AlexanderMP

回答

2

假設您使用SQL 2005或更高版本,可以使用FOR XML在一個字段中創建逗號分隔列表。就把下面你SELECT聲明在您需要的項目列:

SUBSTRING(
    (SELECT TOP (3) ','+ltrim(rtrim(Projects.Title)) 
    FROM EmployeeProjectPlanning AS emp 
    INNER JOIN Projects as proj ON emp.ProjectID = proj.ProjectID 
    WHERE (emp.EmpID = 1) 
     AND (emp.MonthID = 9) 
     AND (emp.Year = 2011) 
    ORDER BY emp.Hours DESC 
    FOR XML PATH('') 
),2,8000) AS Projects