繁体   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