sql 字串拼接 實現交叉表

2021-05-28 05:16:46 字數 1877 閱讀 1783

alter procedure dbo.儲存過程1

asdeclare @date nvarchar(7)

declare @nsql nvarchar(4000)

set @nsql =''

declare date_cursor cursor for

select distinct convert(varchar(7),完成日期,120) as aaa from [21發貨合計材質] order by aaa

open date_cursor

fetch next from date_cursor into @date

while @@fetch_status =0

begin

set @nsql = @nsql + ',sum( case (convert(varchar(7), 完成日期, 120)) when ''' + @date + ''' then

完成重量 else 0 end) as ''' + @date + ''''

fetch next from date_cursor into @date

endclose date_cursor

deallocate date_cursor

set @nsql = 'select table_cz.材質, sum(table_cz.完成重量) as 重量合計' + @nsql + 'from [21發貨合計材質] as table_cz group by 材質 order by 材質'

execute sp_executesql @nsql

這是乙個可以實現類似交叉表功能的語句。

首先來分析下思路

所謂的列標題,這裡就是所有的年月,因為這裡的年月隨時間是變化的,所以要先把這個動態集先求出來。

select distinct convert(varchar(7),完成日期,120) as aaa from [21發貨合計材質] order by aaa

完了,根據case  when 的語法,把所有的年月情況先組合成連續的語句

while @@fetch_status =0

begin

set @nsql = @nsql + ',sum( case (convert(varchar(7), 完成日期, 120)) when ''' + @date + ''' then 完成重量 else 0 end) as ''' + @date + '''' f

etch next from date_cursor into @date

end

這裡說明下''' + @date + '''  的含義  第乙個' 是字串開始的標誌 第二三個表是乙個 ' 的意思 ,後面三個類推。其實結果就是 '@date' ,注意 第乙個是字串開始的標誌。詳如下解釋

exec('delete from '+@tablename+ ' where importtime = '''+@imp_date+'''') end

大神們能幫我解釋下最後為什麼要4個單引號麼?

在sql字串是以單引號作為分界符的,在字串前面和後面各乙個單引號。但是字串中也能包含單引號,為了使語法分析器能夠區分字串中的單引號還是分界符。規定當字串中出現單引號時,在其前面新增乙個單引號作為區分。也就是說, 在單引號分隔的字串中,兩個連續的單引號''表示乙個單引號字元。

最後的四個連續單引號分界為:

第乙個單引號,字串的開始分界符。

接下來連續的兩個單引號,表示字串的值(乙個單引號)

第四個單引號,字串的結束分界符。

最後把語句全部組合。先分組,在 case when.

新建儲存過程步驟:查詢-->新建-->建立文字儲存過程

SQL 拼接字串

寫sql的時候有時候用到需要拼接多個字段或者在查詢出結果的字段裡加入一部分固定的字串。方法一 在查詢到的結果後,用 去拼接。這種方法就不在贅述。方法二 使用資料庫提供的方法concat a,b oracle 中concat a,b 只能有兩個引數,如果concat中連線的值不是字串,那麼oracle...

sql字串拼接

oracle 使用 或者concat sql select aaa bbb from dual aaa bbb aaabbb sql select concat aaa ccc from dual concat aaa aaaccc mysql中,使用 如果字串全是數字則轉化為數字,否則轉換為0,也...

sql字串拼接

在sql語句中經常需要進行字串拼接,以sqlserver,oracle,mysql三種資料庫為例,因為這三種資料庫具有代表性。sqlserver select 123 456 oracle select 123 456 from dual 或select concat 123 456 from du...