sqlserver列转行实例(只需要 修改其中几个字段 就可以直接使用)

2 篇文章 0 订阅
1 篇文章 0 订阅

首先创建表

CREATE TABLE [dbo].[ColumnIpParameter] (
  [ColumnIp_ip] int  IDENTITY(1,1) NOT NULL,
  [Columnlp_typeid] int  NULL,
  [Columnlp_Listing] varchar(50) COLLATE Chinese_PRC_CI_AS  NULL,
  [Columnlp_port] varchar(50) COLLATE Chinese_PRC_CI_AS  NULL,
  CONSTRAINT [PK_ColumnIpParameter] PRIMARY KEY CLUSTERED ([ColumnIp_ip])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
)  
ON [PRIMARY]
GO

ALTER TABLE [dbo].[ColumnIpParameter] SET (LOCK_ESCALATION = TABLE)

ColumnIp_ipColumnlp_typeidColumnlp_ListingColumnlp_port
11IP地址127.0.0.1
21端口8080
31子网掩码255.255.255.0
41网关地址127.0.0.254
51MAC地址00:00:00:00:00

 

修改  储存过程名字(ColumnIp) 行转列表(ColumnIpParameter) 分组字段(Columnlp_typeid)  行变列的字段(Columnlp_Listing)      行变列值的字段(Columnlp_port) 这几个字段  就可以使用了   需要在SQL Server Management Studio里面使用,不要在Navicat Premium 12里面使用,因为有一些函数使用不了(亲测);

ALTER PROCEDURE ColumnIp
    //如果不需要带参数,那就不需要写
AS
BEGIN
    DECLARE @sql_str NVARCHAR(MAX)
DECLARE @sql_col NVARCHAR(MAX)
DECLARE @sql_where NVARCHAR(MAX)
DECLARE @tableName SYSNAME --行转列表
DECLARE @groupColumn SYSNAME --分组字段
DECLARE @row2column SYSNAME --行变列的字段
DECLARE @row2columnValue SYSNAME --行变列值的字段
SET @tableName = 'ColumnIpParameter'  
SET @groupColumn = 'Columnlp_typeid'
SET @row2column = 'Columnlp_Listing'
SET @row2columnValue = 'Columnlp_port'
SET @sql_where = 'WHERE Columnlp_typeid = 1'

--从行数据中获取可能存在的列
SET @sql_str = N'
SELECT @sql_col_out = ISNULL(@sql_col_out + '','','''') + QUOTENAME(['+@row2column+'])
    FROM ['+@tableName+']  GROUP BY ['+@row2column+']'
--PRINT @sql_str
EXEC sp_executesql @sql_str,N'@sql_col_out NVARCHAR(MAX) OUTPUT',@sql_col_out=@sql_col OUTPUT
--PRINT @sql_col

SET @sql_str = N'
SELECT * FROM (
    SELECT ['+@groupColumn+'],['+@row2column+'],['+@row2columnValue+'] FROM ['+@tableName+']'+@sql_where+') p PIVOT
    (max(['+@row2columnValue+']) FOR ['+@row2column+'] IN ( '+ @sql_col +') ) AS pvt
ORDER BY pvt.['+@groupColumn+']'
--PRINT (@sql_str)
EXEC (@sql_str)
END

 

运行实例 SQL Server Management Studio 查询里面运行

下面是运行效果

参考 https://www.cnblogs.com/liangqihui/p/6718896.html  并进行了优化

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值