2011-11-02 75 views
4

我正在嘗試構建一個sql,它將返回特定發票的客戶作爲列表。SQL結果作爲列表

爲了更好地解釋我自己,我附上了我想要完成的一個圖表。

enter image description here

,你可以從SQL結果看,我想的SQL,顯示客戶爲每個invoices.number

名單我將如何完成SQL(對於SQL Server)?

+1

你有一個很好的數據庫設計進入這個,但它讓我困惑,爲什麼你想要一個結果集與逗號分隔值。這幾乎不是一個好主意。 – 2011-11-02 16:11:23

+0

@Shark,這似乎是一個非常標準的要求。你爲什麼說這是一個壞主意?我同意,如果他將這些信息存儲在他的數據庫中是一個壞主意,但是如果他需要根據業務需求選擇這種格式的數據,它會受到什麼影響? –

+1

是的,這是一個演示目的的業務需求。 – Yannick

回答

3
declare @Invoices table(ID int, Number varchar(10)) 
declare @Customers table(ID int, Name varchar(20)) 
declare @InvoiceCustomers table(InvoiceID int, CustomerID int) 

insert into @Invoices values (1, 'INV01') 
insert into @Customers values (1, 'NAME1'),(2, 'NAME2'),(3, 'NAME3') 
insert into @InvoiceCustomers values (1, 1),(1, 2),(1, 3) 

select I.Number as InvoicesNumber, 
     stuff((select ', '+C.Name 
       from @Customers as C 
       inner join @InvoiceCustomers as IC 
        on C.ID = IC.CustomerID 
       where IC.InvoiceID = I.ID 
       for xml path(''), type).value('.', 'varchar(max)'), 1, 2, '') as CustomersName 
from @Invoices as I 
+0

優秀的作品...完美的作品 – Yannick