--> title: mssql
編號重排常見解決方案
--> author : wufeng4552
--> date: 2009-11-25 if
object_id
('[tb]')is
notnull
drop
table [tb] go
create
table [tb] (id int
,id1 nvarchar
(6),id2 sql_variant
)insert
into [tb]
select
1,'001'
,null
union all
select
2,'001'
,null
union all
select
3,'001'
,null
union all
select
4,'002'
,null
union all
select
5,'002'
,null
union all
select
6,'002'
,null
--方法
1 update
declare
@id1 varchar
(3),@id2 int
update
[tb] set @id2=
case
when @id1=id1 then @id2+1 else 1 end
,id2=@id2,@id1=id1
select
*from tb
-->
查詢結果 /*
idid1id2
----------- ------ -----
10011
20012
30013
40021
50022
60023
(6 個資料列受到影響)
*/ --方法
2 子查詢
update
t set
id2=(
select
count
(*)from [tb] where id1=t.id1 and id<=t.id)
from
[tb] t
select
*from [tb]
-->
查詢結果 /*
idid1id2
----------- ------ -----
10011
20012
30013
40021
50022
60023
(6 個資料列受到影響)
*/ --方法
3 臨時表 if
object_id
('tempdb..#'
)isnot
null
drop
table #
select
*,cnt=
identity
(int
,0,1)
into # from tb order
by id1,id
update
a set id2=b.cnt-c.cnt+1
from
[tb] a ,# b,
(select
id1,
min(cnt)cnt from # group
by id1)c
where
a.id1=b.id1 and a.id=b.id and b.id1=c.id1
select
*from tb
-->
查詢結果 /*
idid1id2
----------- ------ -----
10011
20012
30013
40021
50022
60023
(6 個資料列受到影響)
*/ --方法
mssql2005 cte ;
with
cte as
(select
*,cnt=
row_number
()over
(partition
by id1 orderby(
select 1))
from [tb])
update
cte set id2=cnt
select
*from tb
-->
查詢結果 /*
idid1id2
----------- ------ -----
10011
20012
30013
40021
50022
60023
(6 個資料列受到影響)
*/
MSSQL求中位數 常見解決方案 整理帖
title mssql求中位數 常見解決方案 整理帖 環境描述 按id和datevalue排序,希望能取到每乙個的中間值,若id總數為奇數,取第 n 1 2個的值 如果是偶數,取第n 2個的值 if object id tb is not null drop table tb gocreate ta...
中文亂碼常見解決方案
亂碼問題是困擾很多程式設計師的問題,為什麼別人的機器是正常的,我的是亂碼的,為什麼本地是正常的,測試環境是亂碼,生產環境是亂碼?注入此類的問題,我們該怎麼解決這個亂碼問題?本文章不斷更新,將自己遇到的,丟擲來,有則改之,無則加勉。首先,明確一點 計算機記憶體中,統一使用unicode進行編碼。既然有...
推薦系統冷啟動問題的常見解決方案
1.冷啟動問題定義 推薦系統需要根據使用者的歷史行為和興趣 使用者未來的行為和興趣,對於bat這類大公司來說,它們已經積累了大量的使用者資料,不發愁。但是對於很多做純粹推薦系統的 或者很多在開始階段就希望有個性化推薦應用的 來說,如何在對使用者一無所知 即沒有使用者行為資料 的情況下進行最有效的推薦...