Excel分组(或使用SQL)

时间:2018-03-26 19:06:48

标签: excel vba excel-vba

相信我正在过度思考这一点。因此创建了一个SQL报告来生成如下所示的数据:

Client# Parent# Industry    Client Name A   B   C   D   E   F   G   
1       0       Agriculture ABC Co.     0   0   0   50  0   0   0   
2       1       Agriculture DEF Co.     25  0   0   0   0   0   0   
3       2       Agriculture GHI Co.     0   0   0   0   0   0   75  

有10,000行。如果您注意到,则有一个客户编号和一个父编号。上面显示的3个结果是全部属于" ABC公司的子公司。商业。在Excel报告中将它们组合成一行的最佳方法是什么?结果如下:

Client# Parent# Industry    Client Name A   B   C   D   E   F   G   Total
1       0       Agriculture ABC Co.     25  0   0   50  0   0   75  150 

正在考虑可能性:

1)自定义SQL代码以将数据格式化为我想要的方式(每次运行报表时都会很好bc,收集数据后我必须做很少的工作)。我理解尽管使用SQL只是为了检索数据更合适。

2)Excel中有一个选项可以实现此目的。

3)创建一个宏来对数据进行排序并按照我想要的方式对其进行格式化。

感谢您阅读!

1 个答案:

答案 0 :(得分:1)

"因此创建了一个SQL报告来生成如下所示的数据:"

您的downvotes的原因可能是由于您没有在此处发布SQL代码。让我猜你的表格格式,所以为了我的轻松...从mytable中选择*是我猜你已经使用过的。我也在猜测列名...在未来的问题中,更多信息是有帮助的,所以我假设更少。

select t1.client, t2.client, t3.client, t4.client, t1.parent, t2.parent, t3.parent, t1.*
from maytable t1
left join mytable t2 on t1.parent = t2.client
left join mytable t3 on t2.parent = t3.client
left join mytable t4 on t3.parent = t4.client
etc pending how deep this relation goes.

这将显示一个显示父母的列表。 t1。*只是为了获取相关的数据列,你应该完全写出你的列,因为没有提供列列表所以我很懒。您的示例中的客户端ID应如下所示(我在下面的列表中忽略了parentID)

row 1 - 1 , 0, null , null
row 2 - 2 , 1 , 0, null
row 3 - 3 , 2 , 1, 0

现在我们需要一个case语句......当parent = 0时,显示该客户端ID。

select client_id, case when t1.parentid = 0 then t1.client_id
                      when t2.parentid = 0 then t2.client_id
                      when t3.parentid = 0 then t3.client_id
                      when t4.parentid = 0 then t4.clientID
                  end as parent_ID
      , t1.*
from (same as above query)

你可以把上面刚写的内容称之为子查询并从中进行选择,这次抓取你想要的列的总和。

select parent_id, sum(a), sum(b), etc...
from   
  (select client_id, case when t1.parentid = 0 then t1.client_id
                      when t2.parentid = 0 then t2.client_id
                      when t3.parentid = 0 then t3.client_id
                      when t4.parentid = 0 then t4.clientID
                  end as parent_ID
      , t1.*
       from maytable t1
left join mytable t2 on t1.parent = t2.client
left join mytable t3 on t2.parent = t3.client
left join mytable t4 on t3.parent = t4.client
etc pending how deep this relation goes. ) a
group by parent_id

不幸的是,这是我能用您提供的有限信息提供的最佳代码。