sqlserver集合
⑴ sqlserver 聚合 如何分頁
我看沒人回答我再上。
-----------------------------
這個用子查詢就可以了!如果嵌套很多,證明你的資料庫設計很蹩腳。
給你個例子:
----------
SELECT TOP 10
convert(varchar(10),K.ID) as ID,
convert(varchar(20),convert(decimal(18,2),K.SumRealSaleCost)) as SumRealSaleCost,
K.CountRes
from
(
select
ROW_NUMBER() OVER (ORDER BY GetDate()) AS ID,
(sum(M.Sale) over()-sum(M.ReturnSaleCost) over()) as SumRealSaleCost,
count(*) over() as CountRes
from
(
---這里你愛用什麼聚合函數就用什麼聚合函數,我只用了一個簡單的子查詢而已!
select
A.Sale,
A.ReturnSaleCost
from ProctStore A
) M
) K
where K.ID >?
--這個排序最好和分頁函數一致。
ORDER BY K.Sale DESC
--------------------
最外層為類型轉化層
中間是數據邏輯層
最內層就是集合構建層
我這種寫法很多人不理解,本人原創。你網路不到!
---------------------
如果LZ資料庫有功底的話,加入我的團隊吧!資料庫聚賢庄
⑵ sqlserver
摘自:http://database.ctocio.com.cn/analysis/465/7709465.shtml
【IT專家網獨家】SQL Server用戶自定義函數和存儲過程有類似的功能,都可以創建捆綁SQL語句,存儲在server中供以後使用。這樣能夠極大地提高工作效率,通過以下的各種做法可以減少編程所需的時間:
重復使用編程代碼,減少編程開發時間。
隱藏SQL細節,把SQL繁瑣的工作留給資料庫開發人員,而程序開發員則集中處理高級編程語言。
維修集中化,可以在一個地方做業務上的邏輯修改,然後讓這些修改自動應用到所有相關程序中。
乍看之下,用戶自定義函數和存儲過程的功能似乎一摸一樣。但是,其實這兩者之間還有一些雖然細微但是很重要的差異:
存儲過程是使用EXEC命令獨立調用的,而用戶自定義函數是在另一個SQL語句中調用的。
l存儲程序是允許用戶和程序去使用存儲過程,而不是允許其存取表格,這樣能夠增強程序安全性。與標準的SQL Server相比,存儲程序限制用戶行動許可權方面更為細化。例如,如果你有一個貨存表格,每次賣出一個貨物收銀員都要對表格進行更新一次(從貨存中把該貨品減去一件)。你可以給收銀員設置許可權,允許其使用decrement_item存儲過程,而不是允許他們有任意修改或村表格的許可權。
函數必須始終返回一個值(一個標量值或一個表格)。而存儲過程可以返回一個標量值、一個表值或無需返回值。
總而言之,存儲程序對SQL Server開發員來說是最有價值的寶物之一,用於資料庫中,能夠大大的提高工作效率,增強安全性,絕對超值。
⑶ sqlserver select a from b where a in (X)
1、先說先面的為什麼不行:
前面的IN函數的參數是一個結果集,而的結果集是一個經過修改的長字串,不是多個記錄的集合。
2、再說後面的:
BB欄位應該是類似'2012019339'這樣的短數據。所以不可有一個與你得到的長字串一樣。
而後面的是一個以逗號分隔的字串集合,只要BB是其中一個字串,就符合查詢條件。
3、解決方法:
你應該是想用這樣的方式代替一個長長的查詢語句:
select * from aa where bb in (@3)
用後面的幾行語句替換你的這一行:
select * from aa where bb in (
select RTrim( ''''+REPLACE ( SUBSTRING (@3 , 1 , LEN(@3)), ',' ,''',''')+'''' ))
即可:
declare @sqlstr Nvarchar(1000)
set @3= RTrim( ''''+REPLACE ( SUBSTRING (@3 , 1 , LEN(@3)), ',' ,''',''')+'''' )
set @sqlstr=N'select * from aa where bb in('+@3+')'
exec sp_executesql @sqlstr
⑷ SQL Server 集合查詢
差是except 交是intersection
UNION的語法格式為:
SELECT <COLUMN_NAME>
FROM <TABLE_NAME >
WHERE < CONDITION>
UNION [ALL]
SELECT < COLUMN_NAME >
FROM < TABLE_NAME >
WHERE < CONDITION >
[, ...n ]
其中COLUMN_NAME為查詢欄位的名稱。欄位的定義(UNION 運算的一部分)不必完全相同,但它們必須能夠通過隱式轉換相互兼容。UNION 指定組合多個結果集並返回為單個結果集。ALL表示將所有行合並到結果集合中。不指定該項時,被聯合查詢結果集合中的重復行將只保留一行。
EXCEPT和INTERSECT運算符的使用語法如下所示。
SELECT <COLUMN_NAME>
FROM <TABLE_NAME >
WHERE < CONDITION>
{ EXCEPT | INTERSECT }
SELECT < COLUMN_NAME >
FROM < TABLE_NAME >
WHERE < CONDITION >
[,...n ]
運算符的查詢選擇列表中的所有對應項必須是相容的。有關更多信息,參見 SQL Reference 中的數據類型相容性表。
ORDER BY 子句(如果使用該子句的話)必須放在最後一個帶有集合運算符的查詢後面。對於每個運算符來說,如果列的名稱與查詢的選擇列表中對應項的名稱相同,則該列名只能在 ORDER BY 子句中使用。
在具有相同數據類型和相同長度的列之間進行的運算會產生一個具有該類型和長度的列。針對 UNION、EXCEPT 以及 INTERSECT 集合運算符的結果,參見 SQL Reference 中結果數據類型的規則。
⑸ 在sql server中建存儲過程,如果需要參數是一個可變集合怎麼處理
要看這個參數是用來做什麼用的。
如果是放在in 裡面做條件用的,可以把參數設置成一個字元串就可以了。
也可以換一種處理方法,把集合寫到表中,在存儲過程中,使用這個表的數據進行相關的處理。