0

これからこのテーブルをどのように変換できますか

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

これが必要な理由は、データベースがあり、word を使用して差し込み印刷を行う必要があり、1 ページに 4 行ごとに印刷したいのですが、MS word はページごとに 1 行しか印刷できないため、SQL クエリを使用して 1 つが必要です4 つの行を表す行

前もって感謝します

アリ

4

1 に答える 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テーブルの各レコードには 2 つの列があります。1 つはでid、もう 1 つはnameです。

このPIVOT句は、列をアルファベット順ではなく、指定された順序に強制します (例: id1id2... name1name2...)。

于 2012-12-05T20:25:56.580 に答える