Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过将值移动到新列来合并准重复行_Sql_Excel_Ms Access - Fatal编程技术网

Sql 通过将值移动到新列来合并准重复行

Sql 通过将值移动到新列来合并准重复行,sql,excel,ms-access,Sql,Excel,Ms Access,我有一个包含数千行的表,看起来有点像这样: 名称 子文本 子代码 其他数据 A. 文本1 代码1 a_数据 A. 文本2 代码2 a_数据 A. 文本3 代码3 a_数据 A. 文本4 代码4 a_数据 B 文本1 代码1 b_数据 B 文本2 代码2 b_数据 C c_数据 基本上,您需要枚举行,然后使用条件聚合。这在大多数数据库中都很容易——使用row_number——但在MS Access中却是一个难题。这里有一种方法,假设列中的值没有重复项: select num, other_data

我有一个包含数千行的表,看起来有点像这样:

名称 子文本 子代码 其他数据 A. 文本1 代码1 a_数据 A. 文本2 代码2 a_数据 A. 文本3 代码3 a_数据 A. 文本4 代码4 a_数据 B 文本1 代码1 b_数据 B 文本2 代码2 b_数据 C c_数据
基本上,您需要枚举行,然后使用条件聚合。这在大多数数据库中都很容易——使用row_number——但在MS Access中却是一个难题。这里有一种方法,假设列中的值没有重复项:

select num, other_data,
       sum(iif(seqnum = 1, sub_text, null)) as sub_text_1,
       sum(iif(seqnum = 2, sub_text, null)) as sub_text_2,
       sum(iif(seqnum = 3, sub_text, null)) as sub_text_3,
       sum(iif(seqnum = 4, sub_text, null)) as sub_text_4,
       sum(iif(seqnum = 1, sub_code, null)) as sub_code_1,
       sum(iif(seqnum = 2, sub_code, null)) as sub_code_2,
       sum(iif(seqnum = 3, sub_code, null)) as sub_code_3,
       sum(iif(seqnum = 4, sub_code, null)) as sub_code_4
from (select t.*,
             (select count(*)
              from t as t2
              where t2.name = t.name and t2.sub_text <= t.sub_text
             ) as seqnum
      from t
group by name, other_data;

在Windows Excel 2010+和Office 365中提供的Power Query中,您可以通过

根据示例中重复的列名称和其他_数据进行分组 然后将组合的子表代码和文本列提取到分隔列表中 将该列表拆分为新列 使用电源查询

在数据表中选择一些单元格 数据=>Get&Transform=>fromtable/Range PQ编辑器打开时:主页=>高级编辑器 记下第2行中的表名 将下面的M代码粘贴到您看到的位置 将第2行中的表名更改回最初生成的名称。 阅读评论并探索应用步骤以理解算法 M码


在Windows Excel 2010+或Office 365中,可以使用Power Query轻松完成此操作。在其他版本中,VBA解决方案可能是最简单的。关系数据库模式不规范数据。将数据重新排列到具有相同类型数据的多个相似名称字段中也是不规范的结构。这个数据实际上应该是两个表。谢谢!我不熟悉这种语法,所以我试图理解它如何处理我的实际数据。如果我有第三组名为sub_lang的列,它们必须以相同的方式移动,会怎么样?这是怎么回事?很抱歉,无法在注释中粘贴这么多字符。@Emcs您可以手动将适当的代码行添加到分组行函数中,类似于您所看到的,并为该子组添加一个额外的拆分列行。这样做很有效。再次感谢你!
let
    Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content],

//Group by Name and Other Data
//  extract a delimited list of the sub_text and sub_codes
    #"Grouped Rows" = Table.Group(Source, {"name", "other_data"}, {
        {"sub_text", each Text.Combine([sub_text],";"), type text},
        {"sub_code", each Text.Combine([sub_code],";"), type text}    
        }),

//split the delimited lists into separate columns.
    #"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "sub_text", 
                Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv)),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "sub_code", 
                Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv))
in
    #"Split Column by Delimiter1"