亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

SQL Server 行列轉換(2)

標簽:
SQL Server

参考前一个例子http://www.cnblogs.com/insus/articles/1969896.html,现想使用另外一种方式来处理行列转换,实现下面效果:

 参考代码:

View Code BEGIN
    IF OBJECT_ID ('[dbo].[#t]') IS NOT NULL
    DROP TABLE [dbo].[#t]
    CREATE TABLE [dbo].[#t]
    (
        id INT IDENTITY(1,1),  --产生唯一字段,稍后为循环使用
        RId NVARCHAR(2),
        DT DATE,
        Hits INT
    )
    --把需要处理的数据记录预存入这个临时表中
    INSERT INTO [dbo].[#t] SELECT [RId],[DT],[Hits] FROM [dbo].[RecordHits]    
END

--创建一个临时表,为处理记录所需要表最初表结构
BEGIN
IF OBJECT_ID('[dbo].[#rList]') IS NOT NULL
DROP TABLE [dbo].[#rList]
CREATE TABLE [dbo].[#rList]
(
    DT DATE  --此字段将确定是以日期为记录
)
END

BEGIN    
    --宣告一些变量,为循环记录时所使用
    DECLARE @N INT = 1, @R INT
    DECLARE @RId NVARCHAR(2),@DT DATE
    DECLARE @Hits INT
    
    SET @R = (SELECT MAX([id]) FROM [dbo].[#t])
    WHILE @N <= @R 
    BEGIN
        --取出每笔记录值
        SELECT @RId = [RId],@DT = [DT],@Hits = [Hits] FROM [dbo].[#t] WHERE [id] = @N        
        
        --判断此次循环的记录RId作为临时表[dbo].[#rList]一个字段,如果不存在,修改这个临时表,增加字段,反之,将略去执行下面SQL语句        
        EXECUTE('IF NOT EXISTS(SELECT name FROM tempdb..syscolumns where id=OBJECT_ID(''tempdb..[#rList]'') AND tempdb..syscolumns.name ='''+ @RId +''') ALTER TABLE tempdb..[#rList] ADD [' + @RId + '] NVARCHAR(10)')
        
        --判断此次循环的记录在临时表是否存在,如果不存在
        IF NOT EXISTS (SELECT [DT] FROM [dbo].[#rList] WHERE [DT] = @DT)
        
        --插入此笔记录
        INSERT INTO [dbo].[#rList]([DT]) VALUES (@DT)    
        
        --更新记录。
        EXECUTE('UPDATE [dbo].[#rList] SET ['+ @RId +'] = '''+ @Hits +''' WHERE [DT] = '''+ @DT +'''')
        --循环下一笔
        SET @N = @N + 1
    END--结束循环
END
    --查询处理结果
    SELECT * FROM [dbo].[#rList]    

 

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消