销售订单统计所有订单的总销售金额刷新后怎么显示不出要查询的结果

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

sql 20051、 对订单信息表按照销售部门进行分组统计所有订单的总销售金额,即求出每个銷售部门的销售数量,统计所有订单的总销售金额的
1、\x05对订单信息表按照销售部门进行分组统计所有订单的总销售金额,即求出每个销售部门嘚销售数量,统计所有订单的总销售金额的结果按照部门号进行排序.输出部门名称和销售数量.
2、向订单信息中插入一条订单(数据自己定义),思考一下同时还应该进行哪些表的操作,写出操作的sql语句.

拍照搜题秒出答案,一键查看所有搜题记录

}

1.打开你要查询的表你要查询嘚表为基础表(Base Table)

Mapinfo从你的基础表中抽出数据,把查询结果保存在一个被称为结果表的特殊临时表中结果表仅有满足你的条件的行和列。結果表的默认名是Selection(尽管你可以在SQL  Select对话框的Info Table Named位置上指定一个不同的结果表名)

注意:以下第三条暗示:结果表既反映在Browser窗口,也反映在Map窗口Φ换句话说,可收查询结果保存为另一个图层保存方法见下面的第5条。

3.如果你要看查询结果打开一个Map窗口或(和)一个Browser窗口。默認的是MapInfo自动以一个Browser窗口显示结果表(除非你清除了SQL  Select对话框中的Browser Results检查盒)

如果你的结果表被命名为Selection(默认名),Browser窗就显示一个不同的表名例洳Query1名Query2。这是因为你浏览这个Selection表的瞬间MapInfo对该表作了一个“快拍”,并命名这个快拍为Queryn(n是数字1或更大)。MapInfo主要按快拍是因为“Selection”是一个特殊嘚表名每当你选择或不选择某些行时,Selection都在动态变化

在SQL  Select对话框中,你可以为你的结果表输入一个另外的名字(例如你可以命名伱的结果表为My-Query)。这就阻止了MapInfo把你的结果表重命名为Queryn

4.MapInfo自动选择结果表中全部的行。这样在你执行了SQL  Select之后,你就能够接着执行选择荇的全套操作例如,你可以(通过选择Option>Region  Style)对所有被选择的行提供另一种充填色或者你能够Cut或Copy选择的全部行。

通常你对结果表所作的任何变化都会自动作用于你的原始(基础)表。例如如果你用SQL  Select选择了基础表中的某些行,然后又从你的结果表中删除了部分行MapInfo就会從你的表中删除相应的行。但是如果你查询产生了小计(Subtotals),你可以改变这个结果表而不影响基础表

5.如果你要作一个结果表的永玖备份,选择File>Save As

如果你你不执行Save As存盘,该结果表将在你退出MapInfo时被删除

如果你要你的结果有一个与你的原表不同的列组,就要删去这个*號并输入由逗号分隔的列名(如下同)表达式列表这个区能够包括一个*号或者一个列表达式列表,但不能同时包括这两种要在你填Select  Columns区の前填From Tables区。

如果你查询涉及的不止一个有各个列名之前必须有它的表名,二者之间用西文句号分隔因此,如果你要执行一个涉及两个表的查询其中之一是Canada表,并且你要查询包括该表的Population列那么你必须用列表达式Canada.Population。当你使用两个或多个表时Columns下拉列表自动把表名插到各個列名之前。

(2)只选择部分列出现在结果表中是有用的特别是你的原表有很多列而你仅需操作其中的少数列时(或许因为屏幕上只能同时顯示少数列)

(3)如何输入一系列列名:

在From Tables区输入一个表名,可用键盘打入也可用鼠标从Table下拉列表中选入。

用鼠标在Select Columns区中按击使插入点出現在该区内。

用退格键或删除键删去*号(如果其中有*号)Select Columns区能够包含一个*号或者一串列名,但不能同时包含这两种

如果你的查询还包括另外一些列名,从下拉列表中选择另外的一些列名每当你选择另外的列名时,MapInfo自动插入逗号以分隔列名

SQL Select能够计算出列(derived  Columns)并把这些導出列存放到结果表中。导出列是MapInfo在中根据基础表中已有的一个或多个列的内容计算出的一个特殊的临时列

例如,你的表或许含有字段Purchases92戓Purchases93(分别代表各顾客在1992和1993年购物的总金额)如果你要你的查询结果显示一个Total  Purchases列,表示各顾客1992和1993年合起来的购物金额你可以在你的Select  Colomns区内包括一个导出列。在这个例子中导出列应该有这样的形式:

同样,你可能有一个包含有字段Fname(代表顾客的第一名)和Lname(顾客的后名)的顾客信息表如果你要你的结果表包括顾客的全名,你也可以在你的Select  Columns区包括一个导出列在这个例子中,导出列会有这样的形式:

为指定一个導出列你就要在Select  Columns区输入一个表达式。一个导出列表达式是若干列名操作符(例如+和-)和函数(例如Ucase$函数,它把一个字串转换为大写的)的一个组合

在指定导出列之前,你必须先在From Table区输入一个或多个表名

如何指定一个导出列表达式

输入一个列表达式。列表达式应该包括一个或多个列名如果表达式包括一个以上的列名,这个表达式一般包含操作符(例如+或-)来把多个列组合成为一个导出值  
有许多不哃的函数和操作符能够用于列表达式中。

如果需要为列表达式指定一个别名指定别名的方法是:在列表达式后打一个空格,然后再打入鼡双引号括起来的别名  
别名是可选的。如果你给了你的列表达式一个别名那么,当你以Browser窗口显示结果表时别名就会出现在这个列的顶仩如果你没指定别名,MapInfo会用表达式的内容作为别名(例如“Fname+Lname”)

如果需要,指定另外的列名或导出列表达式如果你输入另外的列表達式,要输入逗号以隔开不同的表达式  
下面的例子显示一个执行加法的导出列表达式,把两个数字列的值加起来这个例子假定Purchases92和Purchases93均为數字列:

下一个例子显示同样的列表达式,附加上了一个可选的列别名(”Net_Purchases”):

下一个例子显示一个执行除法的导出列表达式把Poppulagion列的内嫆除以一百万:

下一个例子显示一个把两个字串列组合起来的导出列表达式。这个例子假定Fname 和Lname都是字串列:

当列是字串列时加操作符(+)执行字串联接而不是数字相加。因此表达式Fname + “ “ +  Lname产生一个由第一名紧跟空格再后跟一名组成的字串。

下一个例子显示一个导出列表达式怎样结合函数调用Proper$函数操作一个字串值并返回一个有正常大写的字串(仅第一字母大写):

下一个例子显示如何用Format$函数重新格式化数芓列。一般数字列都没有包含逗号,不幸的是这使得读大数有困难。下面的例子用Format$函数把逗号插入到Purchases93列中这个例子假定Purchases93是一个数字列:

下一个例子显示一个导出列怎样计算基础表中各行的地理面积:

Obj是一特殊的列名,代表与表中各行相联系的地理对象

(1)通过行的排列顺序联接不同的表

如果两个表没有一个共同的列,你可以根据行的顺序仍然能够联接这两个表如果你知道一个表的第一行与另一个表的第一行是相对应的,并且一般地说,如果你知道第一个表的第n行与第二个表的第n行是对应的那么你就可以通过引用一个名叫RowID的特殊列来联接这两个表。

RowID列含有一个整数值代表着表中各行的行号。因此任何表的第一行都有一个为1的RowID值,第2行有一个RowID值2等等。

为了聯接两个表让MapInfo一个表的第n行与另一个表的第n行匹配起来,就要指定一个Where Condition表达式形如下:

(2)从地理上(用地理操作符)联接不同的表

当两個表都有图形对象时,MapInfo能够根据这些对象之间的空间关系联接这两个表所以,即使你的表没有一个共同的列你也有可能联接不同的表。

地理操作符允许你选择某些对象根据它们与另外的某个对象的空间关系。MapInfo有一个与地理操作符一起使用的特殊列名“Obj”或“Object”。这個列名指的是与你的表相边系的图形对象

地理操作符要放到所指定的对象之间,地理操作符从操作符(Operators)下拉列表中选取

下表列出了哋理操作符:

(如果B的形心在A的边界内的某个位置上)

(如果B的边界全部在A的边界内)

(如果A的形心在B的边界内侧)

(如果A的边界全部在B的边界內)

(如果它们至少有一个共同点或者它们中的一个完全在另一个内)

如果A包括整个B,那么A肯定包含B如果A完全在B内,那么A肯定在B内

MapInfo执行簡单的含有和在内比较,比执行完全含有和完全在内要快因此,除非你绝对相信某些对象是完全在另一些对象之内否则你应该使用Contains和Within洏不用Contains  Entire或Entire Within。

地理操作符提供了一种联接表的方法当表中没有你能建立起联接的列时,你可以用地理操作符(在Where  Condition区内)指定联接关系如果你要执行一个涉及一个Cities表和一个State表的两表查询,你可以用如下的表达式之一联接两个表:

在任何一种情况下MapInfo都能找到在各个州内的全蔀城市,然后把代表一个城市的一个行与含有它的州的行联系起来用同样的SQL查询,你也能够用集合功能来合计每个州的城市数或者以州为根据总结基于城市的数据。

当你有Counties 表和一个Customers表时Counties是多边形,Customers是点你可以用下列地理表达式之一指一个集合联接:

(3)联接两个或更哆的表(根据共同字段)

一般,你是把你的资料贮存在几个不同的表中你有你自已的数据文件,你也可能有从MapInfo购买的各种统计所有订单嘚总销售金额资料的数据库SQL允许你建立关联以便你把这些不同表中的资料接到一起,成为一个单独的结果表设想这样一种情况:你有┅个有人口统计所有订单的总销售金额交资料的Counties表(各个County按年龄段、种族和职业种类的人口数统计所有订单的总销售金额),你还可能有關于顾客订单资料的数据库你想检测一下这两个表,看一定种类的订单是否来自具有一定人口统计所有订单的总销售金额特征的Counties或许伱想根据订单与人口的统计所有订单的总销售金额特征的组合选择若干个Counties(县)。要做到这一点你必须能够联接这两个表。

假设Counties表含有縣名同样订单表的一个列也含有订单来源的县名,这样两个表都有一个共同的字段,即县名MapInfo能够用这个共同的字段来联接这两个表。

表名(在From Tables区)的顺序是重要的如果两个表都含有Map对象,结果表将只含有排列在From  Tables区中第一个表的Map对象另外,当查询完成时MapInfo会自动选擇列在From  Tables区第一个表的部分或全部行。这样在前例中,MapInfo会选择Counties表的部分或全部行其结果也会包括从Orders表中拷贝来的数据,但Orders表本身不会被選择

当你联接两个表时,结果表的行数取决两个匹配的好坏假定你有一个10000行的Order表,要把这个Order表与有50行的States表联接结果表可能有10000行の多。但是如果Orders表中的某些行没有与States表中的行相匹配结果表就会少于10000行。因此如果Orders表中有400行无state名(或许由于数据输入错误),并且如果这个关联是依赖State名结果表就可能只有9600个行了。

当SQL Select对话框联接两个表时你指定的如何联接这两个表的子句(Clause(s))必须放在Where  Condition区内的其它子洺之前。

你可以用Update Column来修改SQL Select多表联接的结果表当你要更新一个表中带有另一个表的信息的一个列时,你可以:

例如假定你要选出1990年人口夶于全国各州平均值的全部州。换句话说如果平均州人口是5百万,你要选出所有平均人口大于5百万的州在实行中,你要在Where  Condition区中使用如丅的过滤标准:

然而你并不知道那平均值是多少。但是你知道MapInfo能够用如下集合表达式计算出那个平均值:

再选择是在Where Condition区内,在>操作符の后再选择必须用园括号括起来。

最有用的再选择包括一个Select子句一个from子句和一个Where子句,象下面这样:

考虑如下的SQL Select它选择各州中人口夶于4000000的全部城市:

再选择返回代表1990年人口大于400000的全部州的地理对象。然后主选择语句设到被再选择选中了的州内全部城市注意:主选择語句用了一个地理操作符(Within)来做这个事情。

虽然前一查询用两个表States表和Cities表,但Cities是出现From  Tables区的仅有的表这是因为在再选择中使用了States。如果一个表仅仅是被用于再选择内那么这个表的表名不需要出现在From Tables区中。

在下一个例子中我们选择与田西纳州相交的所有州,换言之所有相邻的州。

首先MapInfo执行再选择:

再选择找到了代表田纳西州的图形对象。然后主Where  condition找到了States表中与代表田纳西州的图形相交的全部对象伱可以用类似的查询选择与某给定街道相交的全部街道。

这个查询找到含有销售商的所有县主Where condition有这样的一个形式:

一个县对象Contains一个经销商对象。

经销商对象组是由再选择:Select obj from dealers产生的MapInfo选择代表含有经销商的各个县对象的行。

最后对于再选择有几点注意事项:

你不能有嵌套嘚再选择,即是说每个Select语句你只能有一个再选择。

一个过滤标准是一个逻辑表达式它通常把一个列值与某个另外的值作比较。例如鉯下的过滤标准用大于操作符(>)测试订单金额列是否有大于100的值。

如果一个查询包含了上面这个Where Condition子句MapInfo就只选择那些订单金额值大于100的荇。

Where  Condition区可以包含两个或更多的逻辑表达式但这些表达式必须被词“And”或“Or”隔开。如果表达式是用词And连接MapInfo仅选择那些两个标准满足的荇。如果表达式是用Or连接MapInfo就选择满足其中任何一个标准的行。

过滤标准可用于你的基础表的任何一个列不管你是否在Select Columns区中包括了这个列。

列可以用列名或列号来引用列号指明是在Select Columns中已有的列的顺序。

因此“Col”和“col6”分别指第一和第六列,号之前必须有字母“Col”

用SQL Select對话框的Where Condition区的基本目的可能是两个:行过滤和关联。Where  condition区服务于多个目的在某些场合下,你可能要用一个Where  condition表达式来过滤你的表以便你只看到满足一定标准的那些列。在一些场合下你要利用Where  condition区来指定一种关联,以便你的查询能够包括来自两个或更多个表中的列

默认,MapInfo是鼡升序排序一个表如果你要用一个字符型字段进行排序,升序意味着A出现在B之上如此类推。如果你对一个数字型字段进行排序小的數值出现在大的数值之上。

为了以降序排序以便大的数出现在小的数之上,要在Order By  Columns区中的列名之后放一个词desc例如,你查询World表用如下的方式:

是用Population对这个表排序,降序

当MapInfo执行多级排序时,各级排序有其自己的升/降序设置这样,下面的例子按State列执行升序然后按Population列执行降序:

在这个区,你有两种方法输入一个列名:

输入列的名字(例如前例中的列名state)
输入列号,这里的1代表排列在Select Columns区中的第一列在数字之前不偠打入“Col”。  
如果你要用一个导出列进行排序并且这个导出列有一个别名的话你可以在Order By  Columns区输入这个别名。如果导出列没有别名就输入列号(例如1)。

在SQL Select对话框中利用Order By  Columns区,允许你对结果表的行进行排序排序影响到出现在Browser窗口中和各个行从顶到底出现的顺序。如果你打算把Browser窗口作为一报告打印出来你可能要对你的结果表进行排序。

Order By  Columns区是可选的如果你留下这个区空着,结果表就不被排序如果你在这茬区输入一个列名,MapInfo就根据那个列的内容对结果表进行排序

在Order By Columns指明多级排序的列名要用逗号隔开。依次为第一级、第二级…

SQL Select对话框中Group By  Columns区昰可选的如果你在这个区输入一个或多个列名,结果表将含有这个表的小计(Subtotals),或集合信息

注意:结果表变成了小计表,没原始数据小计的依据是列值相同者。

当你指定一个Group By  Columns值时MapInfo查询所指定的列,看那个列的那些行有相同的值因此,结果你有一个顾客数据库并苴你是按StateName列分组,MapInfo就会把所有California的顾客放列到另一个组如此等等。MapInfo然后计算各组的集合信息(总合均值等)。

如果你要在各个州的基础仩合计你的顾客表输入表示顾客所在的州的列名(例如StateName)到Group By Columns区

如果你要计算各州的全部销售( Sales)合计,输入如Sum(Sales)之类的表达式(这里嘚Sales是列名)。

在Select Columns区中那些非集合函数基础的所有列还必须在Group By  Columns区列出。这些是MapInfo为了确定分组要检测的列这些列具有独特数据值的每一个組在查询表中有一个单独的行。导出列应该用表示相对位置的编号指定“1”、“2”、“5”分别代表第一、第二和第五列。

这个查询告诉MapInfo计算每一个有记录的全部行数并生成一个按月分组的查询表。结果表第月有一行那个行有一个表示有多少人在那月生病的列。

在Group By Columns区伱应该按列名或列编号来引用列(1代表列在Select  Columns区的第一个列)。当你不使用联接时你可以用正规的字段名。当你用导出列的值分组时或鍺如果你联接两个表时,你必须用列号代替列名按号引用列时,数字前不要加“Col”字样

你可以输入一个以上的列到Group By  Columns区。MapInfo首先按你列出嘚第一个列来对行进行分组在那些组中,MapInfo再按第二个列进行再分组以此类推。对于各个结果行查询表都含有基于集合函数的全部列嘚集合值。

(这里有一个问题每一个结果行只能是一个集合函据的结果吗?可否不同的列执行不同的集合函数)

设想你有一顾客订单表。表中的各个行代表一分单独的订单表中有一个列含有接受订单的销售代表的名字,另一个列含有顾客的名字再有一个列含有订单金额(Amount).

对每个销售代表,你想找出:

那个销售代表接受的订单数量
那个代表登录的订单平均金额
那个代表填写的订单的总金额

1.找出对應某一个销售代表的全部行

3.计算这个销售代表的定单的平均金额:Avg(Amount)

4.计算这个销售代表的定单的总金额:Sum(Amount)

MapInfo对每一个销售代表都要做这些工作嘫后产生一个对每一个代表有一个单独行的结果表。

集合操作符(Count,Avg和Sum)小计有相同销售代表值的全部行的数据值

这是一个在体质上与前┅个相同的查询,除了我们现在是按顾客分组而不是按销售代表分组外这个SQL  Select找出订单Count,Average和Sum是针对各个顾客的而不是销售代表的。

下面的例孓说明按多列分组:多重分组

在Group By  Columns区我们指定了两列名,在这种情况下MapInfo首先按销售代表组合行,然后再按顾客组合这个查询的结果表對应于每一个不同的顾客棗销售代表组合都有一个行。

当某个顾客通过两个或更多的销售代表订货时那个顾客与第一个销售代表做的生意都有一个行来总结。全部行首先是按销售代表分组然后,对于各个销售代表又按顾客分组。

集合函数MapInfo有下列集合函数:

Count(*):计算一个組内的记录个数,它仅用*作为其参数是因为它适用于整个 记录而不是记录中的某个特定字段。

Sum(表达式):计算一个组全部记录表达式值的總和

Avg(表达式):计算一个组全部记录表达式值的平均值

Max(表达式):找出一个组全部记录表达式值中的最大值

Min(表达式):找出一个组全部记录表达式值中的最大值

以上所述的表达式最简单的情况是一个字段名(列名)。

这个区告诉MapInfo要查询那些表你必须在这个区最少输入一个表名。如果你要MapInfo查询两个或更多的表就要输入用逗号分隔的一系列表名。

如果你在这个区输入了两个或两个以上的表名那么,你还必须在Where Condition區指定表达式来告诉MapInfo如何连系这些表

如果你输入了两个表名,MapInfo自动计算一个适当的Where  Condition表达式但是如果你用了三个或更多的表名,你必须掱工修改这个表达式当你按多表联接时,所有的表必须是基础表你不能把结果表(例如Qurey5)用于多表SQL  Selec。

这个区有不同的任务取决于你嘚查询性质。当你查询一个单表时该区是可选的(即不填也可)。如果你查询涉及到连接两个或多个表你必须指定一个Where  Condition表达式,那个表达式必须表明MapInfo应该如何联接这两个表

如果你愿意,你可以在该区输入过滤标准输入过滤标准的方法是打入一个判断真假的逻辑表达式。例如当你查询World表时,如果你只选择人口大于5百万的行就要指定如下的Where  Condition子句:

这个区的数字中间不要打逗号。

这个区允许你小计你嘚结果表如果你输入一个列名(或被逗号分隔的一串列名)到该区,MapInfo就小计你的查询结果并且只给你显示出小计结果表,而不显示你嘚表的每个行

计算小计是一个两步曲:

1.输入一个(或一组)列名到该区

这个区允许你对你的结果表进行排序。如果你输入一个(或被逗號分隔的一组)列名到该区MapInfo就以你输入的列作为关键字对你结果表的行进行排序。默认是升序A在B之上,小数在大数之上降序可在列洺后跟一个desc字。例如:

该区是可选的如果空着,结果表将不排序

这个区允许你命名结果表。默认的结果表名是Selection如果你要指定一个另外的名字,就把它打入该区你输入的表名不应该是一个打开的表。如果你频繁使用SQL  Select并且如果你用selection作为你的结果表名,你会以得到许多咗上重叠的结果表(例如Query1,Query2,Query3等)告终这些Queryn表不会造成任何伤害;然而,有的人就是不喜欢这大量打开的表如果你要避免这大量打开的Queryn表,那你在该区输入一个另外的表名就行了例如你输入表名Qresults:

然后再进行的各个SQL操作就只用Qresults作为结果表名。这个方法你只能得到一个结果表(Qresults),不管你进行了多少次查询。

它是一个多目的的查询工具用SQL选择,你可以完成下列任务之一或全部:

过滤你的数据,以便你只看到你感兴趣的行和列
执行关系连结,把两个或多个表组合成一个结果表
创建关系连结,(根据已有列的内容计算出新值的列)  
按数据值或(和)字母顺序排序你的数据
小计你的数据,以便你只看到一个小计表,而不是整表

Select允许你查询你的数据库根据一定的准则从一个表中选择记录和对象,并创建一个你以平面图、表格浏览器或曲线图方式来观看的结果表

Select对话框允许你指定查询准则

That Satisfy在此打入你的查询表达式,或者用鼠标点Assist 钮使顯示表达式对话框这个对话框将帮助你构成你的查询表达式。

这个选项允许你命名保存查询结果的临时表“Seltction”是默认值。如果你选择叻“Selection”MapInfo就命名这个表为Query1,Query2等。

当你要查询结果按某个列的值排序时选择这里。默认的是查询不被排序你可以通过使用Select并指定一个排序依据(但不能任何表达式)把一个表排列成某个需要的顺序。MapInfo选择表中所有的记录并根据指定列中的值对它们进行顺序

进入你可以用以構成查询表达式的表达式对话框。

这个盒默认是标记的当你需要你的查询结果表时,保留它被标记否则清除它。该表的命名是根据输叺到Store results in Table的标记

3.在That Satisfy区内打入你的查询表达式,或者点Assist钮显示帮助你写表达式的表达式对话框

要按某个列的值对查询结果排序(可选的)

如果Browse Results检查盒标记,一个有你的查询结果的Browser窗口就显示出来

你可以用这个Select命令加亮一个Map或一个Table中符合一定准则的对象,并且创建一个你能浏覽成图或作曲线图的象任何别的Table一样的结果表。

当你正与一个Browse Window打交道时满足查询准则的记录都被加亮。

当你正与一个Map打交道时所选對象的图形对象都被加亮。

当你同时既与一个map窗口又与一个Browse窗口交道时这些对象和记录都是加亮的。

在所有情况下都自动建立起一个叫做Selection的工作表。这个表包括着查询结果你可以使用这个表作平面图或曲线图,像任何其它表一样

当你用Select或SQL  Select作查询时,从你的源表生成叻临时表显示在窗口中时,这些表被命名为Query1,Query2等关闭这些表就清除了它们,但不会影响你的源表但是,如果你关闭了你的源表所有楿关的查询表将被关闭并被清除。

为了保存一个查询表的内容要用:

然后你可以关闭这个查询表,有效地删除它以后要打开它就用通過Save Copy As建立表时的名字。

要更新带有另一表的信息的一个表中列应该:

}

我要回帖

更多关于 统计所有订单的总销售金额 的文章

更多推荐

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

点击添加站长微信