当前位置:首页 » 编程语言 » sqlserverrollup
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserverrollup

发布时间: 2022-06-25 23:42:12

A. sqlserver 联合查询排序问题

不知道你原来的sql语句啥样子啊。。。


SELECT
ISNULL(sale_item, '总计') AS item,
CASE
WHEN GROUPING(sale_item) = 1
AND GROUPING(STR(DATEPART(qq, sale_date))) = 1
THEN '总计'
WHEN GROUPING(sale_item) = 0
AND GROUPING(STR(DATEPART(qq, sale_date))) = 1
THEN '小计'
ELSE
STR(DATEPART(qq, sale_date))
END AS sale_q,
SUM(sale_money) [money]
FROM
sale_report
GROUP BY
sale_item, STR(DATEPART(qq, sale_date)) WITH ROLLUP;
item sale_q money
---- ---------- ----------------------------------------
A 1 180810.00
A 2 182819.00
A 3 184828.00
A 4 184828.00
A 小计 733285.00
B 1 180.00
B 2 455.00
B 3 735.00
B 4 1012.00
B 小计 2382.00
C 1 1398.00
C 2 1426.00
C 3 1457.00
C 4 1457.00
C 小计 5738.00
T 3 100.00
T 小计 100.00
总 总计 741505.00
(18 行受影响)
<hr/>
如果希望 总计、小计显示在上面, 那么 ORDER BY 设置一下.
SELECT
ISNULL(sale_item, '总计') AS item,
CASE
WHEN GROUPING(sale_item) = 1
AND GROUPING(STR(DATEPART(qq, sale_date))) = 1
THEN '总计'
WHEN GROUPING(sale_item) = 0
AND GROUPING(STR(DATEPART(qq, sale_date))) = 1
THEN '小计'
ELSE
STR(DATEPART(qq, sale_date))
END AS sale_q,
SUM(sale_money) [money]
FROM
sale_report
GROUP BY
sale_item, STR(DATEPART(qq, sale_date)) WITH ROLLUP
ORDER BY
GROUPING(sale_item) desc, item,
GROUPING(STR(DATEPART(qq, sale_date))) desc
item sale_q money
---- ---------- ----------------------------------------
总 总计 741505.00
A 小计 733285.00
A 1 180810.00
A 2 182819.00
A 3 184828.00
A 4 184828.00
B 小计 2382.00
B 1 180.00
B 2 455.00
B 3 735.00
B 4 1012.00
C 小计 5738.00
C 1 1398.00
C 2 1426.00
C 3 1457.00
C 4 1457.00
T 小计 100.00
T 3 100.00
(18 行受影响)

B. sqlserver怎么建临时表

1、表名前使用一个#号,临时表是局部的,使用两个#号,临时表是全局的,在断开连接后sql会自动删除临时表

2、临时表除了名称前多了#号外,其他操作与普通表完全一样。

3、tb_Student是已建立好的表,我们通过临时表temp把tb_Student表中的内容复制到tb_lizi表中,可以使用如下的代码实现:
use mcf
SELECT * INTO #temp FROM tb_Student
SELECT * INTO tb_lizi FROM #temp
执行后断开sql连接并重新连接(也可以退出sq再l重新启动sql),发现tb_lizi表中的内容tb_Student表中的内容完全一致,实现了复制,同时我们没有用代码删除temp表,但mcf数据库中却没有temp表了,这是因为断开连接时sql自动删除了temp表

C. sql语句查询今年单价总金额

年,季,月,周,天,小时
也就是说你要的是这个六个分别的金额与汇总。
按照从大到小,如果仅仅是按照现有的表来操作,那么个人觉得毫无疑问的要查6遍,每次汇总都是一遍,如果数据量大的话毫无疑问的卡死。
个人觉得可以先改造一下表,将时间字段分成这六个部分,然后分组的时候加上rollup,只要注意书写顺序,那么一次应该就可以了。这是我能想到的减小运算量的一个办法。

D. 您好,有个SQL知识想请教下,根据一张表,按照班级统计语数外的总分插入一横“小计”,最后插入“总计”

你看看这个吧,sqlserver写法

自己也粘贴一下

创建表数据

createtabletest
(序号varchar(2),
班级varchar(2),
姓名varchar(10),
语文int,
数学int,
英语int)

insertintotestvalues('01','b4','张三',23,87,98)
insertintotestvalues('02','b1','李四',76,87,56)
insertintotestvalues('03','b2','王五',56,87,67)
insertintotestvalues('04','b3','赵六',78,87,65)
insertintotestvalues('05','b2','啊啊',45,68,89)
insertintotestvalues('06','b6','说说',65,56,45)
insertintotestvalues('07','b4','等等',90,54,34)
insertintotestvalues('08','b5','菲菲',89,76,90)

执行

select
casewhen班级isnullthen'总计'else班级end班级,
casewhen姓名ISnullthen'小计'else姓名end姓名,
sum(语文)语文,
sum(数学)数学,
sum(英语)英语
fromtest
groupby班级,姓名withrollup

结果截图

E. sql中引用一个表的查询结果作为条件来查询另一个表如何实现

sql中引用一个表的查询结果作为条件来查询另一个表称为sql嵌套查询。

简单子查询

示例:Copyselect name,age from person

where age >

( select age from person

where name = '孙权'

)

in嵌套查询

in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

示例:

select name from person

where countryid in

(

select countryid from country

where countryname = '魏国'

)

(5)sqlserverrollup扩展阅读

子查询的语法规则

1、子查询的select查询总是使用圆括号括起来。

2、不能包括compute或for.browse子句。

3、如果同时指定top子句,则可能只包括order by子句。

4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。

5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

6、如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

子查询的组成

1、包含标准选择列表组件的标准select查询。

2、包含一个或多个表或者视图名称的标准from子句。

3、可选的where子句。

4、可选的group by子句。

5、可选的having子句。

F. sql 如何做到按规律汇总数据

你这是一个rollup的分组。只不过这个rollup特殊了一点而已。
另外我记得任何数字+null=null,所以可能需要一个nvl(oracle)或ifnull(sqlserver)去设0一下。
我不知道你的itemno是什么格式的,如果是字符,那么就用substr截取,如果是数字,那么就用trunc。我写一个字符的。
group by rollup(substr(itemno,1,2),substr(itemno,1,4),itemno),前面是你的sum语句什么的,应该能够得到你想要的答案。

G. SQL查询时报错:CUBE 和 ROLLUP 无法计算区分聚合

我sqlserver2008下执行没问题

把你的where条件去掉了,因为你给的数据里没byzd3那个字段

现在结果如下

你数据库什么版本啊?

H. 如何创建SqlServer视图的索引

在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命令视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。(Sql Server联机帮助)
没研究过,说不出什么东西来,现在只把方法记下来。
语句:
Create VIEW vXXX WITH SCHEMABINDING AS……
Create UNIQUE CLUSTERED INDEX idxXXX ON vXXX(cXXX)
一个标准视图转换为一个索引视图必须遵守以下规则:
A.视图必须使用With Schemabinding选项来创建;
如果创建视图时没有with Schemabinding,试图创建视图时就会报错:……因为该视图未绑定到架构
B.在这个视图中不能使用其他视图、导出表、行集函数或自查询,也就是说只能使用表;
C.视图所用到的基本表必须和视图属于同一个所有者;
D.视图只能链接同一个数据库中的表;
E.视图不能包含一个外部链接或自链接,也就是说在链接表时只能使用INNER JOIN并且INNER JOIN前后不能使同一个表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;
F. 视图不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct关键字;
G. 视图不允许使用某些集合函数,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;
H. 视图不能使用Select * 这样的语句,也就是说视图的所有字段都必须显示指定;
I. 视图不能包含Text、ntext、image类型的列;
J. 如果视图包含一个Group By子句,那么他必须在Select列中包含count_big(*);
K. 视图中的所有标和用户自定义的函数都必须使用两段式名来引用,即所有者.表或函数名称;
L. 所有的基本表和视图都必须使用 Set Ansi_Nulls On 创建;
M. 在创建索引时或创建索引后执行IUD时,必须显示或隐式地执行:
Set ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF
各个选项的有关信息或意义,可以查阅SQL Server的联机丛书,这里就不再介绍了;
N. 索引视图只有在SQL Server2000的企业版或开发版或者更高的版本中才能创建。

在一个表上创建了索引视图后,对其执行delete操作时报错:Delete 失败,因为下列 SET 选项的设置不正确: 'CONCAT_NULL_YIELDS_NULL, ANSI_PADDING,ARITHABORT',删除这个视图问题就解决了

以上是转载自CSDN