2011-11-02 3 views
4

특정 송장에 대한 고객을 목록으로 반환하는 sql을 작성하려고합니다.목록으로 SQL 결과

자신을 더 잘 설명하기 위해 내가 성취하려는 것을 보여주는 다이어그램을 첨부했습니다. 당신은 SQL 결과에서 볼 수 있듯이

enter image description here

본인은 SQL (SQL Server의 경우)를 달성 할 방법

invoices.number 각 목록으로 고객을 표시하는 SQL을 하시겠습니까?

+1

당신은 꽤 좋은 데이터베이스 디자인을 가지고 있지만, 결과가 쉼표로 구분 된 값으로 설정되기를 원하는 이유가 무엇인지 궁금해합니다. 이것은 거의 좋은 생각이 아닙니다. –

+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