[英]MS Access 2013 Concatenate Rows query
我正在尋找用於MS Access的FOR XML PATH('')之類的東西。
由於我只能讀取數據,而不能修改訪問文件/數據庫,因此查詢之外的所有操作對我來說都是不可行的。
一點細節:
我的目標是要進行如下查詢,但可用於MS Access 2013:
SELECT
Items.Name, Items.Description ,
(SELECT ItemValues.Value + ';'
FROM Itemvalues
WHERE Itemvalues.ItemID = [value]
AND someOtherConditions
FOR XML PATH ('') ) AS Values
FROM
Items
WHERE
Items.ID = [value]
如果ItemValue選擇的結果會像
SELECT ItemValues.Value
FROM Itemvalues
WHERE Itemvalues.ItemID = [value]
AND someOtherConditions
輸出:
itemval1
property2val
1234foo
項目選擇的結果將像
SELECT
Items.Name, Items.Description
FROM
Items
WHERE
Items.ID = [value]
輸出:
Testitem | This is a test item
我想要像這樣的結果行
Testitem | This is a text test item | itemval1;property2val;1234foo;
謝謝你的幫助
PS:我已經看過其他有關此主題的文章,但是由於這些文章已有多年歷史,或者不適合我的情況,所以我正在嘗試自己的運氣。
考慮以下查詢,其中子查詢和派生表嵌套在聚合查詢中。 內部查詢對每個ItemID
的ItemValues
數量進行計數,然后外部查詢使用計算出的計數按[Name]
和Description
有條件地進行聚合,以輸出項目值的串聯字符串。
不幸的是,您將需要為要串聯的每個值顯式添加Max(IIF(...)
查詢語句,如下所示,僅使用示例中的三個。
請注意:此解決方案假定您在[ItemValues]
表中具有一個主要的自動編號ID
字段:
SELECT Items.Name, Items.Description,
Max(IIF(ItemCount=1, t1.Value, NULL)) & ';' &
Max(IIF(ItemCount=2, t1.Value, NULL)) & ';' &
Max(IIF(ItemCount=3, t1.Value, NULL))
... As ItemValues
FROM(
SELECT Items.Name, Items.Description, t1.Value,
(SELECT Count(*) FROM ItemValues t2
WHERE t1.ItemID = t2.ItemID AND t1.ID >=t2.ID) As ItemCount
FROM Items INNER JOIN ItemValues t1 ON Items.ID = t1.ItemID
) As derivedTable
GROUP BY Items.Name, Items.Description;
OUTPUT
Name Description ItemValues
Testitem This is a test item itemval1;property2val;1234foo
順便說一下,您的Items
和ItemValues
表似乎類似於Entity-Attribute Value(EAV)模型,其中多個數據項和類型存儲在單個列中。 盡管它可以在極端的歸一化類型下實現高效存儲,但是通常不建議在數據庫設計中使用此模型。 請參閱關於此主題的SO帖子: 此處和此處 。 考慮修改后的表架構,以避免將來出現復雜的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.