by好像能实现。幸存表A,内容如下:

编码 仓库 数量 01 A 6 01 B 7 02 A 8 02 B 9

今昔想按编码查询出这种格式:

01 A 6 01 B 7 汇总小计: 13 02 A 8 02 B 9 汇总小计: 17

问:该怎么贯彻?

by好像能实现。乍风流倜傥看,好像相当的轻巧,用group
by好像能兑现?但精心钻探下去,你又会以为group
by也是回天无力,总欠缺点什么,无从入手。那么,到底该怎么办吗?别急,SQL
Server早已帮我们搞好了,上面,跟笔者来。

率先,让大家来看意气风发段话:

在变化包括小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP
运算符生成的结果集相像于 CUBE 运算符所生成的结果集。

by好像能实现。CUBE
运算符生成的结果集是多维数据集。多维数据集是实际数据的恢宏,事实数据即记录个别事件的数量。增添创建在客户计划分析的列上。那几个列被称为维。多维数据集是贰个结实集,在那之中带有了各维度的全部一点都不小概率构成的时有时无表格。

by好像能实现。CUBE 运算符在 SELECT 语句的 GROUP BY
子句中钦定。该语句的选择列表应包括维度列和聚合函数表达式。GROUP BY
应指定维度列和器重字 WITH
CUBE。结果集将包括维度列中各值的保有超大可能率构成,以至与这几个维度值组合影相配的根基行中的聚合值。

CUBE 和 ROLLUP 之间的分别在于:

CUBE 生成的结果集体现了所选列中值的装有结成的集结。

ROLLUP 生成的结果集呈现了所选列中值的某后生可畏档期的顺序结构的集纳。

看完以上的这段话,悟出了如何没有?若无,那么……嘿嘿,你的理性还相当不够啊,离“三花棸顶”还早着吗:)。接下来大家再看风华正茂段:

SELECT 编码, 仓库, Sum(数量) as 数量 FROM A GROUP BY 编码, 仓库 WITH ROLLUP

–关键就是末端的WITH ROLLUP

–当然,你也足以用WITH CUBE,可是结果会有一点一点都不大学一年级样

只怕看完上边这段你要么感到“云里雾里”,摸不着头脑。实在不领会也没涉及,自身入手做。

率先:建三个地点所说的A表,输入几行数据;

跟着:张开你的SQL
Server查询深入分析器,连上包罗你下面所建A表的服务器,采取包罗该表的数据库;

然后:Copy下面这段SQL
语句,Paste到查询剖判器中,按F5,怎么着?见到上面出来了如何?是或不是和本身上边包车型大巴相近?

编码 仓库 数量 01 A 6 01 B 7 01 NULL 13 02 A 8 02 B 9 02 NULL 17 NULL NULL 30

–借令你用的是WITH CUBE,结果集的背后还会多出两条:

NULL A 14 NULL B 16

啊!奇异,结果中怎么有那么多“NULL”值?哈,别急,这几行难为大家所要的汇集数据行,简单看出:

01 NULL 13便是对编码为01的具有旅馆中的数量的聚焦;02 NULL
17是对编码为02的持有饭馆的数额的汇总;

NULL NULL 30是对具备素材行数量的汇总。

什么样?答案出来了吗?是还是不是很简短吗?当然,上边还有些美中相差,那就是有不计其数“NULL”的存在。如何去掉这一个抽象的NULL呢?下边大家再实行优化。

俄罗斯贵宾会,1、用Grouping替换NULL值

SELECT CASE WHEN (GROUPING(编码) = 1) THEN 'ALL' ELSE ISNULL(编码, 'UNKNOWN') END AS 编码, CASE WHEN (GROUPING(仓库) = 1) THEN 'ALL' ELSE ISNULL(仓库, 'UNKNOWN') END AS 仓库, SUM(数量) AS 数量 FROM A GROUP BY 编码, 仓库 WITH ROLLUP

–适当的接受Case函数

结果本人这里就不写了,正是把地点的“NULL”值全部换到“ALL”字符串

2、利用程序做更加的的优化

//平时为了显得上的内需,我们亟须对上述SQL语句生成的结果做一些优化,上边给出自然语言描述:

WHILE{ IF 编码值不为ALL而仓库值为ALL { 将编码值用“小计:”替换,将仓库值用""替换; 将这一行的颜色标示为灰色; } ELSE 编码值为ALL仓库值也为ALL { 将编码值用“总计:”替换,将仓库值用""替换; 将这一行的着色标示为淡绿色; } 指针移到下一条; }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章