行转列函数式调用写法(学习)

本文介绍如何使用SQL进行数据聚合操作,包括自定义函数实现多值字段的合并、使用CASE语句进行条件聚合以及生成静态和动态SQL来处理不同场景下的成绩表数据。

例如表A
id data
1 A
1 B
1 C
2 D
2 F

转换成表B
1 A+B+C
2 D+E

smerg是自定义函数
创建一个函数smerg:

create function smerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+name from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct id,smerg(id) as name into 表B from 表A

——————————————————————————————————————————————————————————————————————

[转载]为了自己以后查着方便

--和行转列的应用效果差不多了,统计结果中可能会用到
--测试表
create table Test
(F1 varchar(10),
 F2 varchar(10))
--插入数据
insert into Test
select 'jack' F1,'book1' F2
union
select 'jack' F1,'book2' F2
union
select 'jack' F1,'book3' F2
union
select 'Mary' F1,'book4' F2
union
select 'Mary' F1,'book5' F2
union
select 'Mike' F1,'book1' F2
union
select 'Mike' F1,'book5' F2
union
select 'Mike' F1,'book7' F2
union
select 'Mike' F1,'book9' F2
--一条动态SQL语句

go
--合并函数
CREATE FUNCTION MergeCharField(@Group varchar(255))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+','+rtrim(F2) FROM Test WHERE F1=@Group

RETURN(substring(@r,2,8000))
END
GO
--调用
select F1 [name],dbo.MergeCharField(F1) [book] from test group by F1
--删除测试环境
drop table test
drop FUNCTION MergeCharField

/*
name     book
--------------------------
jack       book1,book2,book3
Mary     book4,book5
Mike     book1,book5,book7,book9

*/

d) as name into 表B from 表A

 

 

_________________________________

假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文  74
张三 数学  83
张三 物理  93
李四 语文  74
李四 数学  84
李四 物理  94
想变成

姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
SQL 语句如下: 
代码如下:
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go

--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case Subject when '语文' then result else 0 end) 语文,
max(case Subject when '数学' then result else 0 end) 数学,
max(case Subject when '物理' then result else 0 end) 物理
from tb
group by name

--动态SQL,指subject不止语文、数学、物理这三门课程。

declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)


 

函数式组件中使用 React 和 Ant Design 实现分页功能,并通过调用接口传递 `pageNum` 和 `pageSize` 参数,通常涉及以下几个关键点: ### ### 使用 useState 管理分页状态 在函数式组件中,可以使用 `useState` 来管理当前页码 `pageNum`、每页数量 `pageSize` 以及总数据量 `total`。这些状态变量将用于控制分页器的显示和请求参数。 ```jsx import React, { useState, useEffect } from 'react'; import { Pagination } from 'antd'; const MyTableComponent = () => { const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const [total, setTotal] = useState(0); const [pageNum, setPageNum] = useState(1); const [pageSize, setPageSize] = useState(10); const fetchData = async (page, size) => { setLoading(true); try { const response = await fetch(`/api/data?pageNum=${page}&pageSize=${size}`); const result = await response.json(); setData(result.list); setTotal(result.total); } catch (error) { console.error('Error fetching data:', error); } finally { setLoading(false); } }; useEffect(() => { fetchData(pageNum, pageSize); }, [pageNum, pageSize]); const handlePageChange = (page, size) => { setPageNum(page); setPageSize(size); }; return ( <div> {/* 表格或其他展示内容 */} <Pagination current={pageNum} pageSize={pageSize} total={total} onChange={handlePageChange} showSizeChanger showTotal={(total) => `共 ${total} 条`} /> </div> ); }; ``` ### ### 接口调用与分页逻辑 上述代码中,`fetchData` 函数负责向后端接口发送请求,并根据传入的 `pageNum` 和 `pageSize` 获取对应页的数据。当用户点击不同的页码或更改每页数量时,`handlePageChange` 方法会更新状态并触发新的请求[^1]。 ### ### 自定义分页器行为 Ant Design 的 `Pagination` 组件支持自定义行为,例如添加“跳转到指定页”功能,或者调整分页器样式以适应不同场景需求。可以通过设置 `showSizeChanger` 属性允许用户更改每页显示条数,并通过 `onChange` 回调处理页码变化事件[^2]。 ### ### 远程数据加载与状态同步 为了确保 UI 和数据同步,使用 `useEffect` 监听 `pageNum` 和 `pageSize` 的变化,并在每次变化时重新获取数据。这种方式可以确保用户在切换页码或更改每页大小时,能够实时获取最新的数据[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值