簡體   English   中英

MS Access 2013串聯行查詢

[英]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:我已經看過其他有關此主題的文章,但是由於這些文章已有多年歷史,或者不適合我的情況,所以我正在嘗試自己的運氣。

考慮以下查詢,其中子查詢和派生表嵌套在聚合查詢中。 內部查詢對每個ItemIDItemValues數量進行計數,然后外部查詢使用計算出的計數按[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

順便說一下,您的ItemsItemValues表似乎類似於Entity-Attribute Value(EAV)模型,其中多個數據項和類型存儲在單個列中。 盡管它可以在極端的歸一化類型下實現高效存儲,但是通常不建議在數據庫設計中使用此模型。 請參閱關於此主題的SO帖子: 此處此處 考慮修改后的表架構,以避免將來出現復雜的查詢。

暫無
暫無

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

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