第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

如何實(shí)現(xiàn)數(shù)據(jù)行轉(zhuǎn)換列顯示

標(biāo)簽:
SQL Server C#

在Insus.NET的blog里,可以找到相关的行列转换文章。
不过,今天Insus.NET再详细演示一番,望让网友们更加理解与应用。
还是先来看看实时演示吧:



想实现行与列转换,得先一弄清楚哪些原数据被转为列名,哪些原数列名被转换为行数据。就依上图来说。原列名[Fruit Name]没有被转换,还是作为新表的列名,而原[Kind Name]和[ID]列名被转换为新[Fruit Name]列的行数据了,而原[Fuit Name]所在行的数据将转换为列名。

好,我们弄清楚,在存储过程中,创建一个雏形的临时表,并插入两笔数据。



然后,我们宣告一个表变量,你也可以宣告一个临时表也行。目的是把需要处理的数据先存入这个表变量中。这样有处理时,不必每次去读取原始表数据。


接下来,我们开始处理表变量的数据:



上图的代码示例中,
#26是找出表变量中[Fruit_nbr]最大的值。
#28至#45行是一个循环块,只要变量@r小于等于变量@rs,它都会跑,每跑完一遍,变量@r都会在#44行中加1。
#32行代码,是判断表变量中是否有跳号的记录。虽然[Fruit_nbr]的一个自动增长的字段,如果在记录维护时,有删除记录的话,就会出现跳号。因此需要判断。
#34行代码,是把当前处理记录的两个值,即ID和Kind Name找出来。
#36至#38 行代码,是修心临时表,添加一个字段。
#40和#41是对临时表作更新操作。
#47行代码是SELECT临时表所有记录。


完整的存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        Insus.NET
-- Create date: 2013-09-04
-- Description:    convert row to column.
-- =============================================
CREATE PROCEDURE [dbo].[usp_Fruit_Row2Col]
AS
BEGIN
    IF OBJECT_ID('[dbo].[#DummyTable]') IS NOT NULL
        DROP TABLE [dbo].[#DummyTable]    
    CREATE TABLE  [dbo].[#DummyTable] 
     (   
        [Fruit Name] NVARCHAR(20)
     )       
     INSERT INTO [dbo].[#DummyTable] ([Fruit Name]) VALUES ('Kind Name'),('ID')    
     DECLARE @ft AS TABLE ([Fruit_nbr] INT,[KindName] NVARCHAR(30),[FruitName] NVARCHAR(30))
     INSERT INTO @ft SELECT [Fruit_nbr],[KindName],[FruitName] FROM [dbo].[udf_Fruit]()
     
          
     DECLARE @r INT = 1, @rs INT = 0
     SELECT @rs = MAX(ISNULL([Fruit_nbr],0)) FROM @ft     
     WHILE @r <= @rs 
     BEGIN
        DECLARE @kn NVARCHAR(30), @fn NVARCHAR(20)
        IF EXISTS (SELECT TOP 1 1 FROM @ft WHERE [Fruit_nbr] = @r)
        BEGIN        
            SELECT @kn = [KindName], @fn = [FruitName] FROM @ft WHERE [Fruit_nbr] = @r
            EXECUTE('IF NOT EXISTS(SELECT [name] FROM [tempdb].[dbo].[syscolumns] WHERE [id] = OBJECT_ID(''[tempdb].[dbo].[#DummyTable]'') 
                     AND [tempdb].[dbo].[syscolumns].[name] = '''+ @fn +''')
                     ALTER TABLE [tempdb].[dbo].[#DummyTable] ADD [' + @fn + '] NVARCHAR(100)')
            EXECUTE('UPDATE [dbo].[#DummyTable] SET ['+ @fn +'] = N'''+ @kn +''' WHERE [Fruit Name] = ''Kind Name''')
            EXECUTE('UPDATE [dbo].[#DummyTable] SET ['+ @fn +'] = '''+ @r +''' WHERE [Fruit Name] = ''ID''')    
        
        END
        SET @r += 1
     END
    SELECT * FROM [dbo].[#DummyTable]
END


 在html markup:



cs:



點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

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

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消