簡體   English   中英

Ms Access Query:通過查詢連接行

[英]Ms Access Query: Concatenating Rows through a query

假設我在Ms Access中有一個表,其中包含以下信息:

ColumnA ColumnB
1       abc
1       pqr
1       xyz
2       efg
2       hij
3       asd

我的問題是,如何將第二列中的值連接到基於第一列的行值。 我想要的查詢結果如下:

ColumnA ColumnB
1       abc, pqr, xyz
2       efg, hij
3       asd

我想通過查詢來實現這一點。 有人能幫助我實現這個目標嗎?

您需要一個函數來進行連接。

Microsoft Access壓縮表中的多行

使用您的數據的示例:

Select T.ColumnA
  , GetList("Select ColumnB From Table1 As T1 Where T1.ColumnA = " & [T].[ColumnA],"",", ") AS ColumnBItems
From Table1 AS T
Group By T.ColumnA;

這是一個很好的鏈接:如何通過調用函數從SQL中執行此操作。 說明非常清楚,函數是為您編寫的,因此您只需復制,粘貼和運行即可。 即使是不了解VB的人也可以輕松實現它: 從相關記錄中連接值

這可能很難獲得。 如果必須在查詢而不是函數中執行,那么您將遇到的問題是可以連接到一列的行數限制。 到目前為止,我發現實現這一目標的唯一方法是通過iif語句。

SELECT 
test1.ColumnA AS ColumnA, 
First([test1].[ColumnB]) & IIf(Count([test1].[ColumnB])>1,"," & Last([test1].[ColumnB])) AS ColumnB
FROM test1
GROUP BY test1.ColumnA;

收益:

ColumnA  ColumnB 
1      abc,xyz 
2      efg,hij 
3      asd

這將返回第一個和最后一個,但我確信只需一點工作就可以解決選擇功能,但就像我說的那樣你必須為你想要添加的每個附加項添加更多的iif語句,因此局限性。

該表可以有一個序列列,它為ColumnA序列提供唯一的主鍵:

table: t1
ColumnA sequence ColumnB
1       1        abc
1       2        pqr
1       3        xyz
2       1        efg
2       2        hij
3       1        asd

並且可以創建交叉表:

query: x1
TRANSFORM Min([columnB] & ", ") AS Expr1
SELECT t1.columnA
FROM t1
GROUP BY t1.columnA
PIVOT t1.sequence;

columnA 1    2    3
1       abc, pqr, xyz,
2       efg, hij,
3       asd,

然后最終查詢可以組合列並刪除最后一個逗號:

SELECT x1.columnA, Left([1] & [2] & [3],Len([1] & [2] & [3])-2) AS columnB FROM x1;

columnA columnB
1       abc, pqr, xyz
2       efg, hij
3       asd

要自動填充序列,可以使用以下VBA代碼:

Sub fill_sequence_t1()
  Dim i: i = 1
  Do While DCount("*", "t1", "sequence IS NULL") > 0
    DoCmd.RunSQL "SELECT t1.columnA, Min(t1.columnB) AS columnB_min INTO t2" & _
                 " FROM t1 WHERE t1.sequence IS NULL GROUP BY t1.columnA;"
    DoCmd.RunSQL "UPDATE t1 INNER JOIN t2 ON (t1.columnA = t2.columnA)" & _
                 " AND (t1.columnB = t2.columnB_min) SET t1.sequence=" & i
    CurrentDb.TableDefs.Delete "t2"
    i = i + 1
  Loop
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM