计算机二级VF辅导:union的使用

计算机二级VF辅导:union的使用,第1张

计算机二级VF辅导:union的使用,第2张

第四节工会的使用

Union可以将几个SQL命令合并成一个,要求是这些命令生成的表在数量、类型、长度、字段顺序上完全相同。它通常用于以下情况:

将几个结构相同的表的记录加在一起,最终的表在结构上与那些表完全相同,但记录数是那些表的记录之和。

例如:我想统计一段时间内商品的发货和进货情况,得到的表是这样的:

产品编号(cpbh)产品名称(cpmc)提货数量(thsl)采购数量(jhsl)

首先,使用两个命令分别计算交货数量和采购数量,并生成两个临时表。最后,通过并集合成一个表。

sele thdmx.cpbh,sum(iif(isnull(thsl),0,thsl))作为thsl;
from cpk left join th DMX;
on cpk . cpbh = th DMX . cpbh;
cpbh集团;
into curs temp 1
sele jhdmx . cpbh,sum(iif(isnull(jhsl),0,jhsl))as jhsl;
from cpk left join jhdmx;
on cpk . cpbh = jhdmx . cpbh;
cpbh集团;
into curs temp2
现在temp1和temp2的格式与最终结果略有不同。它们都缺少一个提货数量(采购数量),不能通过union直接合并。所以我们必须人为地给每个临时表添加一个相应的字段。该命令如下所示:

sele cpbh,thsl,10000-10000 as jhsl;
从temp1
联合;
sele cpbh,0,jhsl
从temp2
into curs tem3
在每一条SQL命令中,都增加了一个字段,它的值都是零(不,当然是零)。这样,每个SQL命令生成的表都具有相同的结构,因此可以使用union。让我们试一试。不加字段就不会出错,但是结果的结构和要求不一样。

在上面的命令中,每一节都可以用" as "来重命名字段。如果第一节用了“as”,以后可能就不用了。否则就是最后一个用“as”的部分起作用,前面的无效。

当temp3出来的时候,可以用层次合并。

sele cpbh,sum(thsl)为thsl,sum(jhsl)为jhsl;
从temp3
cpbh集团;
到curs temp4
现在这个temp4就是最终的正确结果。

做了这么多步骤,你应该明白这种联合统计命令是怎么做的了。但我们不会满足于优秀,我们可以简化以上步骤:

sele thdmx.cpbh,sum(iif(isnull(thsl),0,thsl))作为thsl,10000-10000作为jhsl
from cpk left join th DMX;
on cpk . cpbh = th DMX . cpbh;
cpbh集团;
联合;
sele jhdmx.cpbh,0,sum(iif(isnull(jhsl),0,jhsl));
from cpk left join jhdmx;
on cpk . cpbh = jhdmx . cpbh;
cpbh集团;
到curs temp1

sele cpbh,sum(thsl)为thsl,sum(jhsl)为jhsl;
从temp1
cpbh集团;
into curs temp2
我们来看看。用union是不是更简洁?这里,只计算传入和传出的数据。如果数据被返回并废弃,第一种方法将使用五个命令来生成六个临时表。使用第二种方法,无论添加多少个案例,都只需要两个命令和两个临时表。

只要记住union中每个SQL命令的结果中字段的个数、类型、长度和顺序完全相同,就可以组合使用。

在分析一个使用union的长SQL命令时,可以按照union分成一个SQL命令,然后对每个SQL命令进行分析,看看用什么链接类型链接了什么表,过滤条件是什么,用什么做了什么分组,执行了什么字段汇总功能。只要知道SQL命令的工作流程顺序,即使是复杂的SQL命令也能很快理解。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级VF辅导:union的使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情