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 text排序
我认为用order by 完全可以
1、用text保存日期太浪费,字段太大,占空间,可用varchar
2、还是用"order by 日期 desc"不行吗?我觉得问题不大
C. sqlserver数据表排序问题
不晓得你这个NewId()方法是怎么写的,我自己也写过一个类似的方法,思路是这样的:
首先,获取数据表的行数。
然后在NewId()方法里int id=行数+1,这样就保证了插入的数据永远排在最后一行。
D. SQLServer 对一个查找结果重新排序
select * from (SELECT TOP 8 * FROM Table WHERE ID<12302 ORDER BY ID ) as a order by a.id
E. 如何用sqlserver语句按一列的内容分组后,再更新序号统一排序
select编号,row_number()over(partitionby编号orderby编号)行号from表名
这样吗?
F. SQLSERVER字符串排序
另加一列,定义为zdyxh(自定义序号),将该字段填充满足顺序的序号
G. sqlserver排序
排序可以是升序的
(ASC),也可以是降序的
(DESC)。如果未指定是升序还是降序,就假定为
ASC。
下面的查询返回按
ProctID
升序排序的结果:
代码如下
复制代码
USE
AdventureWorks2008R2;
GO
SELECT
ProctID,
ProctLine,
ProctModelID
FROM
Proction.Proct
ORDER
BY
ProctID;
如果
ORDER
BY
子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序
Proction.Proct
表中的行,然后在每个产品子类别中按
ListPrice
升序排序这些行。
代码如下
复制代码
USE
AdventureWorks2008R2;
GO
SELECT
ProctID,
ProctSubcategoryID,
ListPrice
FROM
Proction.Proct
ORDER
BY
ProctSubcategoryID
DESC,
ListPrice;
问题
同一...排序可以是升序的
(ASC),也可以是降序的
(DESC)。如果未指定是升序还是降序,就假定为
ASC。
下面的查询返回按
ProctID
升序排序的结果:
代码如下
复制代码
USE
AdventureWorks2008R2;
GO
SELECT
ProctID,
ProctLine,
ProctModelID
FROM
Proction.Proct
ORDER
BY
ProctID;
如果
ORDER
BY
子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序
Proction.Proct
表中的行,然后在每个产品子类别中按
ListPrice
升序排序这些行。
代码如下
复制代码
USE
AdventureWorks2008R2;
GO
SELECT
ProctID,
ProctSubcategoryID,
ListPrice
FROM
Proction.Proct
ORDER
BY
ProctSubcategoryID
DESC,
ListPrice;
问题
同一个查询的结果集为什麽有时候是按他想要的顺序排列,有时候又不是,或者是在SQL2000里是这个顺序,到了SQL2005/2008又是那个顺序?
其实,只要语句里没有指定“order
by”,SQLSERVER并不会按照顺序返回的。有可能你的表里有一个字段已经建立了索引
你想结果集按照那个建立了索引的字段排序,那么你不指定“order
by”是没有问题的,因为表的存储顺序就是按照那个字段
的顺序排好序了,所以可以不指定“order
by”,但是如果你没有在想排序的那个字段建立索引,或者在SQL2000里建立了
索引,而在SQL2005/2008里没有建立索引,那么就要明确地用“order
by”指定。如果你没有指定,哪怕一模一样的查询,
结果集顺序这一次和上一次不一样是很正常的。
H. sqlserver 字段类型与排序
关于text类型的页面存储可以看这个文章 http://blog.csdn.net/feixianxxx/archive/2010/04/05/5452759.aspx
如果开启了表中的TEXT IN ROW 选项 一般内容少的LOB类型直接存储在DATA页面.....
取的速度应该差不多的。。
另外一个情况,则在数据页面留下一个指针,取lob类型的数据需要跨页面,一般速度 较慢...
你那个慢,可能是因为TEXT IN ROW选项没开,第一句取的是f3字段 是text字段 需要跨页面 所以比较慢。。
如果你的TEXT IN ROW选项开了 那可能是因为缓存的原因
I. sqlserver 排序问题
你是按GoodsName 分组的,就是说会有多条记录的GoodsName字段相同其它字段可能不同。那么你想把表里其它的字段都显示出来,但一个GoodsName只能显示一条,那其它字段显示哪一条的内容呢?
所以你懂了,这是个矛盾。