2013-04-11 70 views
0

是否可以使用子查詢執行查詢並獲取第一個查詢的一列(DropDownList style)內的子查詢結果?將多個查詢結果在一列中分組

Select Name, Year, (Select SchoolId from Schools) from SchoolRecords 

Output : 

--------------------------  List would be a DropDownList and if I open it I would get 
| Name | Year | SchoolId |  the results of my subquery like so : 
|  |  |   | 
--------------------------  ------------------ 
| Jim | 2011 | List || |  |    || | 
|  |  |  \/ |  |    \/ | 
--------------------------  ------------------ 
| Tom | 2012 | List || |  || 
|  |  |  \/ |  | 123245465 | 
--------------------------  | 456547787 | 
           ------------------ 
+0

我不確定我是否完全理解,是否需要用逗號分隔的列表中的項目?你可以爲每個表添加一些示例數據嗎? – Taryn 2013-04-11 16:04:58

+0

@bluefeet任何事情都可以......只要單個單元格中有很多值。逗號分隔或下拉列表(儘管我懷疑它可以這樣做) – phadaphunk 2013-04-11 17:01:35

回答

1

無法在SQL中創建值的下拉列表。但是,如果你只是想在學校列學校名單,那麼你可以使用FOR XML PATH以獲取列表:

Select Name, 
    Year, 
    STUFF((SELECT distinct ', ' + cast(s.SchoolId as varchar(10)) 
     from Schools s 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
     ,1,2,'') schools 
from SchoolRecords 

SQL Fiddle with Demo

然後,如果你有這樣的與特定相關的每個SchoolRecordsschool,那麼你可以只顯示與每個用戶相關的學校:

Select Name, 
    Year, 
    STUFF((SELECT distinct ', ' + cast(s.SchoolId as varchar(10)) 
     from Schools s 
     inner join record_school rs 
      on rs.schoolid = s.schoolid 
     where r.id = rs.id 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
     ,1,2,'') schools 
from SchoolRecords r; 

SQL Fiddle with Demo