當前位置:首頁 » 編程語言 » 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