2014-02-25 29 views
0

我有一個帶有員工姓名,項目,日期,月份和年份的查詢[Query1]。在查詢中訪問連接值

在另一個查詢[Query2]中,我把所有的值都放到一個交叉表中。我的行是「年,月,員工」。我的專欄是「日」。我的價值觀是項目。

問題是,對於一個日期,可能有多個項目分配給一個員工。

當我嘗試使用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  | - | - 

旁白:[查詢1]是動態的,可能已經刪除或添加到它的重複日期,所以[QUERY2]值必須相應地改變。

+0

它是哪個RDBMS? Access或Sql Server? – Crono

+0

對不起,我似乎我misaged。它是Access。 – Hughes

回答

0

通過使用此處給出的函數allenbrowne.com/func-concat.html,並按照此處給出的示例http://www.access-programmers.co.uk/forums/showthread.php?t=234291,我能夠解決問題。

1

一個簡單的例子,你必須使它的動態,實時scenrio不需要表變量或CTE,如果使用動態sql.i認爲沒有必要的動力,只是硬編碼從1到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