2012-12-05 60 views
0

我怎樣才能從這個訪問SQL查詢到郵件合併

id name 
1 sam 
2 nick 
3 ali 
4 farah 
5 josef 
6 fadi 

改造這個表

id1 name1 id2 name2 id3 name3 id4 name4 
1  sam  2  nick 3  ali  4 farah 
5  josef 6  fadi 

我需要的,這是我有一個數據庫的原因,我需要用做郵件合併字和我想要在一頁上打印每4行,MS字每頁只能打印一行,所以使用SQL查詢我希望一行代表4行

在此先感謝

Ali

+0

我不能找出如何格式化,請幫助:( – Ali

+1

)在編輯區域右側的橙色框上按下白色問號,以便格式化指令。 –

回答

1

您不需要在Access中爲此創建查詢。 Word有一個名爲<<Next Record>>的合併字段,強制移動到下一條記錄。如果您看看如何使用郵件合併嚮導創建標籤文檔,您將看到它是如何完成的。

更新 - 在SQL

列在簡單SELECT語句從柱從基礎表/查詢(或從表達式)推導這樣做。如果您想根據數據定義列,則需要使用交叉表查詢。

首先創建一個運行計數查詢每個人(說你的表稱爲People),並從運行計數計算行和列的位置:

SELECT People.id, Count(*)-1 AS RunningCount, int(RunningCount/4) AS RowNumber, RunningCount Mod 4 AS ColumnNumber 
FROM People 
LEFT JOIN People AS People_1 ON People.id >= People_1.id 
GROUP BY People.id; 

(您將無法在查詢設計器中查看這一點,因爲JOIN不與=>=比較)

此查詢返回的結果如下:

id Rank RowNumber ColumnNumber 
1 0  0   0 
2 1  0   1 
3 2  0   2 
4 3  0   3 
5 4  1   0 
6 5  1   1 

假設此查詢保存爲Positions,下面的查詢將返回結果:

TRANSFORM First(Item) AS FirstOfItem 
SELECT RowNumber 
FROM (
    SELECT ID AS Item, RowNumber, "id" &(ColumnNumber + 1) AS ColumnHeading 
    FROM Positions 

    UNION ALL SELECT Name, RowNumber, "name" & (ColumnNumber +1) 
    FROM Positions 
    INNER JOIN People ON Positions.id = People.id 
) AS AllValues 
GROUP BY AllValues.RowNumber 
PIVOT AllValues.ColumnHeading In ("id1","name1","id2","name2","id3","name3","id4","name4"); 

UNION有這麼在People表中每條記錄將有兩列 - 一個與id,和一個用name

PIVOT條款強制列到指定的順序,而不是按字母順序(如id1id2 ...... name1name2 ...)

+0

我剛剛嘗試了您的建議,它的工作原理謝謝, 您還可以告訴我該怎麼做在SQL中, 謝謝:) – Ali

+0

最後一件事,如果可能的話,我可以請你在PostgreSQL中爲我提供解決方案嗎?它沒有變換/交叉表,但必須有一個方法圍繞它 非常感謝mailmerge解決方案和訪問SQL解決方案:) – Ali

+1

我從來沒有使用PostgreSQL,但看[這裏](http:/ /在'crosstab'表函數中,可以使用/postgresql.org/docs/9.2/static/tablefunc.html)。 –