SQLSERVER行转列

本文介绍了如何在SQL Server中使用自定义函数splitl进行字符串分割,以便将行转换为列,避免了与其他数据库如MySQL和Oracle内置函数的差异。通过实例展示了如何创建和应用该函数来处理数据转换。
摘要由CSDN通过智能技术生成

sqlserver与mysql、oracle不同,sqlserver行转列需要自定义函数,就很恶心,感觉每次使用sqlserver都需要重新学下sql,哈哈哈…好了,话不多说,上代码!

一、自定义创建函数

CREATE FUNCTION splitl (
     @String VARCHAR ( MAX ),
     @Delimiter VARCHAR ( MAX )
) RETURNS @temptable TABLE (datepart VARCHAR ( MAX )) AS
BEGIN
     DECLARE @idx INT =1
     DECLARE @slice VARCHAR ( MAX )
     IF LEN(@String) < 1 OR LEN( ISNULL (@String, '' )) = 0
         RETURN
     WHILE @idx != 0
     BEGIN
         SET @idx = CHARINDEX(@Delimiter,@String)
         IF @idx != 0
             SET @slice = LEFT (@String,@idx - 1)
         ELSE
             SET @slice = @String
         IF LEN(@slice) > 0
             INSERT INTO @temptable(datepart) VALUES (@slice)
         SET @String = RIGHT (@String, LEN(@String) - @idx)
         IF LEN(@String) = 0
             BREAK
     END
     RETURN
END

二、自定义函数创建好了,就是引用函数:

select datepart, ISNULL(tocalAccessNum,0)  from (
SELECT  *  FROM  dbo.splitl( '1,2,3,4,5,6,7,8,9,10,11,12' , ',' ) a
LEFT JOIN (
SELECT
        DATEPART( mm, CreateDate ) times,
        COUNT ( * ) tocalAccessNum
        FROM
        ZJ_SZLY.dbo.Busi_Menu_Log 
        GROUP BY
        DATEPART(mm, CreateDate )
    ) b ON a.datepart = b.times
		) c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SQL Server中,行转列是一种将表中的行数据转换为列数据的操作。根据提供的引用内容,我们可以使用PIVOT函数来实现行转列操作。首先,创建一个临时表#USER,并插入一些数据。然后使用PIVOT函数将科目列转换为新的列名,并将分数作为对应列的值。最后,使用GROUP BY语句按照姓名进行分组,并使用MAX函数获取每个科目的最大值。下面是一个示例的行转列的SQL查询语句: CREATE TABLE #USER ( name NVARCHAR(100), 科目 NVARCHAR(100), 分数 DECIMAL(18,2) ) INSERT INTO #USER (name, 科目, 分数) VALUES ('张三', '语文', 100), ('张三', '英语', 80), ('张三', '数学', 60), ('张三', '物理', 70) SELECT newtemp.name, MAX(newtemp.语文) 语文, MAX(newtemp.英语) 英语, MAX(newtemp.数学) 数学, MAX(newtemp.物理) 物理 FROM #USER s PIVOT ( MAX(分数) FOR 科目 IN (语文, 英语, 数学, 物理) ) AS newtemp GROUP BY newtemp.name 这样的处理方法有助于简化前后端的处理,直接查询转换后的固定列和实体即可,无需再编写大量的特殊处理方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQL Server 行转列](https://blog.csdn.net/qq_45619623/article/details/126529707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值