sql server 2019的資料行列轉換問題

2022-03-13 06:01:24 字數 3015 閱讀 8155

1樓:

靜態sql

select

max(case when a=1 then a end) as a,

max(case when a=3 then a end) as b

from [table]

union all

select

max(case when b=2 then b end) as a,

max(case when b=2 then b end) as b

from [table]

union all

select

max(case when c=3 then c end) as a,

max(case when c=1 then c end) as b

from [table]

動態sql

declare @sql varchar(2500)

select @sql='select '

select @sql =@sql+'

max(case when a='+convert(varchar(10),a)+' then a end) as ['+convert(varchar(10),type)+'],'

from

(select row_number() over (order by a) as type, a,b,c from [table]

) as p

select @sql=substring(@sql,0,len(@sql))

select @sql=@sql+' from [table] union all select '

select @sql =@sql+'

max(case when b='+convert(varchar(10),b)+' then b end) as ['+convert(varchar(10),type)+'],'

from

(select row_number() over (order by a) as type, a,b,c from [table]

) as p

select @sql=substring(@sql,0,len(@sql))

select @sql=@sql+' from [table] union all select '

select @sql =@sql+'

max(case when c='+convert(varchar(10),c)+' then c end) as ['+convert(varchar(10),type)+'],'

from

(select row_number() over (order by a) as type, a,b,c from [table]

) as p

select @sql=substring(@sql,0,len(@sql))

select @sql=@sql+' from [table] '

print @sql

exec(@sql)

row_number 是排名函式 sqlserver2005 裡的,如果2000沒有 就要將表裡面多加一個欄位用來存放每一行的列名。

2樓:傳奇勇者

這樣的問題要寫儲存過程來解決。

在sql server2000中,如何把整型欄位轉換成字串型欄位?

3樓:

使用函式str()

str由數字資料轉換來的字元資料。

語法str ( float_expression [ , length [ , decimal ] ] )

引數float_expression

是帶小數點的近似數字 (float) 資料型別的表示式。不要在 str 函式中將函式或子查詢用作 float_expression。

length

是總長度,包括小數點、符號、數字或空格。預設值為 10。

decimal

是小數點右邊的位數。

返回型別

char

註釋如果為 str 提供 length 和 decimal 引數值,則這些值應該是正數。在預設情況下或者小數引數為 0 時,數字四捨五入為整數。指定長度應該大於或等於小數點前面的數字加上數字符號(若有)的長度。

短的 float_expression 在指定長度內右對齊,長的 float_expression 則截斷為指定的小數位數。例如,str(12,10) 輸出的結果是 12,在結果集內右對齊。而 str(1223, 2) 則將結果集截斷為 **。

可以巢狀字串函式。

說明 若要轉換為 unicode 資料,請在 convert 或 cast 轉換函式內使用 str。

示例a. 使用 str

下例將包含五個數字和一個小數點的表示式轉換為有六個位置的字串。數字的小數部分四捨五入為一個小數位。

select str(123.45, 6, 1)

go下面是結果集:

------

123.5

(1 row(s) affected)

當表示式超出指定長度時,字串為指定長度返回 **。

select str(123.45, 2, 2)

go下面是結果集:

--**

(1 row(s) affected)

即使數字資料巢狀在 str內,結果集也是帶指定格式的字元資料。

select str (floor (123.45), 8, 3)

go下面是結果集:

--------

123.000

(1 row(s) affected)

4樓:匿名使用者

sql中資料型別的轉換,可以用函式

convert()或者cast()

例如:(把整型a轉換為字串)

declare @a int

set @a = 100

convert(char(5),@a)

cast(@a as char(5))

如何使用sqlserver2019建立資料庫

1 開啟企業管理器 2 選擇microsoft sql servers sql server組 local windows nt 資料庫 3 右鍵 新建資料庫 4 寫入資料庫名,點確定就新建一個空的資料庫了 看看這個文件就清楚了!右鍵資料庫,點新建資料庫就可以啦 alter table 通過更改 新...

Sql Server2019與Access相比,各自的優缺點

sql server功能更強大,更專業,提供更高的安全性,能處理複雜的查詢,執行儲存過程,觸發器 相比之下access用於一般要求不高的資料庫 見過汽車和自行車沒有?就這區別。sql server2000功能比較強大,更安全,但成本高,access比較小巧,但效能上弱得多。請問sql server2...

sqlserver2019在與sqlserver提示建立連線時

步驟如下 1 開啟sql server2008,在物件資源管理器下 安全性 登入名 找到自己的登陸賬號,我的是sa,右鍵 屬性 狀態,把 設定 下選 授予 和 登陸 下選 啟用 確定退出。2 在開始選單下找到並開啟 sql server 配置管理器 按如圖的設定 3 開啟sql server2008...