sql如何查询sql一个字段对应多个值表的父列对应的所有子列,后再把这些子列当成父列去查询这些子列下的子列

本帖最后由 梧月书声 于 09:09 编辑

在Excel中数据透视表使我们能够高效的汇总计算数据,其中有一项常用功能便是计算分类汇总百分比这一功能极大地方便了百分比的计算,同時提供了足够多的计算方式可供选择其中大部分计算方式非常直观,无需过多说明就可以理解但父行汇总百分比、父列汇总百分比、父级汇总百分比这三项就不那么好从字面上直观的理解,甚至容易误解所谓的父行、父列、父级究竟是指什么。本文将尝试为您详细解析父行汇总百分比、父列汇总百分比、父级汇总百分比的计算方式进而能够正确理解和应用。

在Excel 2013中右键单击数据透视表中任一数据单え格,在[值显示方式]选单中我们可以看到全部的可选计算方式

要理解百分比的计算方式,我们只需关注百分比的分子和分母这里我们舉sql一个字段对应多个值例子进行讲解:

这是一张数据透视表,在行字段上对“区域”、“销售地区”、“品名”三个字段进行分类汇总“銷售金额”在列字段上有“销售人员”sql一个字段对应多个值字段进行分类汇总“销售金额”,此时[值显示方式]为“无计算”即简单的求和汇总。

下面我们首先选择[父行汇总百分比]结果如下图。

为便于理解我们暂且忽略列字段,假设只有白露一名销售人员

我们可以看箌每sql一个字段对应多个值行字段分类下的“销售金额”总和比上它上一级行字段分类下的“销售金额”总和,得出该字段的汇总百分比即 “品名”/“销售地区”,“销售地区”/“区域”“区域”/“总计” 。上面的描述有些抽象如果看不懂也没关系,具体到实例以D5單元格为例,是由按摩椅(“品名”)的总销售金额比上北京(“销售地区”)的总销售金额计算得出往上一级,D10单元格是由北京(“销售地区”)的总销售金额比上华北(“区域”)的总销售金额计算得出。再往上一级也是最高一层,D17单元格华北(“区域”)的總销售金额比上“总计”计算得出。看到这里您大概已经了解了“父行”的含义了,简单的讲可以描述为“上一级行字段”同理“父列汇总百分比”只需把行字段换成列字段即可,在此不再赘述

下面我们来看“父级的汇总百分比”,个人认为“父级”比“父行”和“父列”还要更抽象一些毕竟“行”和“列”在Excel中是我们经常接触的对象,而这个“级”又如何理解呢继续看这个例子,我们试着将[值顯示方式]设置为“父级的汇总百分比”与上面的“父行汇总百分比”立即显示结果不同,此时Excel会弹出sql一个字段对应多个值对话框要求选擇“基本字段”(如下图)“基本字段”的意思就是计算百分比时作为分母的字段,出现在选项中的既有行字段也有列字段,如果我們选择的“基本字段”是sql一个字段对应多个值行字段则类似父行汇总百分比,在行字段之间计算百分比不同点在于各级行字段均会比仩我们选择的“基本字段”而不是依次比上上一级行字段。选择列字段同理

下面我们结合实例来讲解,下图是将“销售地区”选为“基夲字段”的父级汇总百分比结果:

由于“销售地区”是行字段我们仍然可以忽略列字段只看D列,D5单元格是由按摩椅(“品名”)的总銷售金额比上北京(“基本字段”即“销售地区”)的总销售金额计算得出,与“父行汇总百分比”结果相同而D10单元格则出现了差异,洇为这一级是由北京(“销售地区”)的总销售金额比上北京(“基本字段”即“销售地区”)的总销售金额计算得出所以为100%。再往上┅级D17出现了空值,这是因为“区域”/“销售地区”(即“基本字段”)>100%所以不做计算,为空以上,我们可以看到不论那一集字段,分母始终是我们选定的“基本字段”而与“父级”无关,这也是单看字面意思容易误解的原因

下图是将“区域”选为“基本字段”嘚父级汇总百分比结果,进一步佐证了上面的解释:

希望看到这里您已经对父行汇总百分比、父列汇总百分比、父级汇总百分比的计算方式有了深入的理解。


如果您愿意就此话题进行交流欢迎您在下方留下您的评论。本文是我的个人见解如有谬误,还望不吝赐教
文嶂中所用示例数据来自《EXCEL2010数据透视表应用大全》一书的演示文件,特此声明并致谢

本文为梧月原创,原载于个人博客


并采用知识共享署洺-非商业性使用 4.0 国际许可协议进行许可转载请以URL链接形式标注源地址。
}

我们先看图说话如图1.

看图之后,我们可以很容易的理解了子查询

子查询:在sql一个字段对应多个值查询语句中包含了另外sql一个字段对应多个值查询语句


当子查询中不是呮有一列的情况下,会报这样的错误如图2,所以我们将红框的星号改成想查询的某一列就可以了。如图3.

1、子查询必须放在一对小括号內

2、“=”比较运算符还可以与其他的比较运算符一起使用,要求子查询的列只能有sql一个字段对应多个值

3、子查询通常作为WHERE的条件

4、子查詢中不能出现ORDER BY 子句如果想要排序,只能对父查询进行排序也就是说ORDER BY只能出现在父查询语句中。


根据子查询返回行数的不同又可将其分為:返回多行的子查询返回单行的子查询和嵌套子查询。

       返回多行的子查询是指执行查询语句获得的结果集中返回了多行数据的子查詢。一般情况下对子查询的讨论都是通过WHERE子句实现的,但实际上还能应用于SELECT语句以及HAVING短语中

例如:在【教务管理系统】数据库中,查詢和“小花妹妹”在同sql一个字段对应多个值“年级”的学生“姓名”、“性别”、“年级”的信息语句如下:

本实例中查询也可以利用洎身连接来完成,代码如下:

EXISTS:只管子查询是否有返回行如查有返回行,返回结果为真true否则为假false。并不使用子查询的结果仅用于测試子查询是否有返回结果。

NOT EXISTS: 当子查询返回空行或查询失败时外围查询成功;而子查询成功时或返回非空行,则外围查询失败

注意:如果子查询中能够返回数据行,即查询成功则子查询外围的查询也能成功;如果子查询失败那么外围的查询也会失败,这里EXISTS连接的子查询鈳以理解为外围查询的触发条件

子查询可以由sql一个字段对应多个值比较运算符和一些关键字引入,查询结果返回sql一个字段对应多个值值列表语法如下:

operator表示比较运算符:ANY、ALL和SOME是SQL支持的在子查询中进行比较的关键字。

ANY和SOME:表示外围查询限定条件与子查询返回值进行比较洳果外围查询中有任意多个数据满足比较条件,则全部返回;使用ALL关键字表示外围查询限定条件与子查询返回值进行比较外围子查询返囙结果必须全部满足比较条件。

1、>ALL : 父查询中大于子查询结果中的所有值如图

2、>ANY :父查询的列值中,必须至少大于子查询返回值列表中嘚sql一个字段对应多个值值如图7

注意:SOME与ANY的含义与用法相同。如图8.

3、=ANY和子查询IN:父查询中列值必须在子查询返回的列表中存在如图9

<>ANY: 父查詢的结果中列的值与子查询返回的值列表中有sql一个字段对应多个值不相同的就可以,相当于OR或者的关系父查询中列的值不等于子查询中徝a,或者不等于b或者不等于c。

NOT IN:父查询的结果中列的值必须不能存在在子查询的返回值的列表中,相当于AND并且的关系父查询中列的徝不等于子查询中的值a,并且不等于b并且不等于c。

}

我要回帖

更多关于 sql 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信