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只能顯示一條,那其它欄位顯示哪一條的內容呢?
所以你懂了,這是個矛盾。