2014-02-25 2 views
0

직원 이름, 프로젝트, 일, 월 및 연도가있는 [Query1] 쿼리가 있습니다.액세스 쿼리의 값 연결

다른 쿼리 [Query2]에서 모든 값을 가져 와서 크로스 테이블에 넣습니다. 내 행은 "Year, Month, Employee"입니다. 내 열은 '오늘'입니다. 내 값은 프로젝트입니다.

문제는 한 날짜의 경우 직원에게 할당 된 프로젝트가 둘 이상있을 수 있다는 것입니다.

IIf(Count(*)>0,[Project],"")을 사용하여 프로젝트를 값으로 테이블에 넣으려고하면 프로젝트에 사용할 수있는 값이 두 가지 이상일 수 있으며 액세스 할 때 선택할 수있는 값이 하나도 없기 때문에 오류가 발생합니다.

둘 이상의 프로젝트가있는 경우 값을 연결하는 방법이 필요합니다.

예 :

제외
[Query1] 
Bill | CC555 | 28 | 03 | 2014 
Jim | CC999 | 29 | 03 | 2014 
Jim | CC555 | 29 | 03 | 2014 
John | CC555 | 29 | 03 | 2014 

[Query2] 
Year | Month | Employee | 1 | 2 | 3 | ... | 27 | 28 |  29  | 30 | 31 
2014 | 03 | Bill | - | - | - | ... | - | CC555 |  -  | - | - 
2014 | 03 | Jim | - | - | - | ... | - | - | CC555 + CC999 | - | - 
2014 | 03 | John | - | - | - | ... | - | - |  CC555  | - | - 

:에 Query1]를 [QUERY2] 값은 따라서 변경되어야 동적이며 삭제하거나 추가 중복 기간을 가질 수있다.

+0

RDBMS는 무엇입니까? 액세스 또는 SQL Server? – Crono

+0

죄송합니다. 내가 잘못 본 것 같습니다. 그것은 접근입니다. – Hughes

답변

0

여기에 주어진 함수 allenbrowne.com/func-concat.html을 사용하고 여기에 주어진 예제 http://www.access-programmers.co.uk/forums/showthread.php?t=234291에 따라이 문제를 해결할 수있었습니다.

1

하나의 간단한 예를 들어, 당신은 사용하여 동적 sql.i는 1 동적, 단지 하드 코드의 필요를 생각하지 않는 경우 실제 scenrio에서, 그것은 동적 테이블 변수 또는 CTE의 필요하지 않습니다해야 31

;With CTE as 
(
select 'Bill' Employee ,'CC555' codes,28 dd,03 mm ,2014 yrs union all 
select 'Jim ','CC999', 29 , 03 , 2014 union all 
select 'Jim ','CC555', 29 , 03 , 2014 union all 
select 'John','CC555', 29 , 03 , 2014 
) 
select yrs,mm,Employee,isnull([28],'-')[28],[29],[30] from 
(select Employee,dd,mm,yrs 
,stuff((select ','+codes from cte b where b.Employee=a.Employee for xml path('')),1,1,'')codes 
from cte a) src 
pivot (min(codes) for dd in([28],[29],[30])) pvt 
+0

MS Access는 CTE를 지원합니까? – Crono

+0

죄송합니다. MS Access는 MS Access에서 원하는 위의 기능을 지원하지 않습니다. – KumarHarsh

+0

내 이해 Access는 쿼리에 CTE를 지원하지 않습니다. 나는 VBA에 익숙하지 않지만이 링크를 우연히 발견했다. http://stackoverflow.com/questions/9217234/concatenating-multiple-rows-into-single-line-in-ms-access이 작품이 될까? – Hughes