㈠ sql 如何动态多行转多列
使用存储过程。
方法如下:
1、先查询出表里面的列名称
2、行列转换
举例
1、查询student字段名
SELECT
a.colorder as _colOrder, --字段序号
a.name as _colName --字段名
FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<> 'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sys.extended_properties g
on a.id=g.major_id AND a.colid = g.minor_id
where d.name='student' --所要查询的表
order by a.id,a.colorder
2、行列转换
SELECT
MAX (CASE WHEN SetupID = 1 THEN SetupName ELSE NULL END ) AS [1],
MAX (CASE WHEN SetupID = 2 THEN SetupName ELSE NULL END ) AS [2],
MAX (CASE WHEN SetupID = 3 THEN SetupName ELSE NULL END ) AS [3],
MAX (CASE WHEN SetupID = 4 THEN SetupName ELSE NULL END ) AS [4]
......
FROM table
㈡ sql多行多列数据怎么弄成一行多列
做个带参数的存储过程就行
㈢ SQL server把少列多行拼接成多列多行
SELECT[date],
MAX(CASEWHEN[id]='a'THEN[金额]ELSENULLEND)AS'a.金额',
MAX(CASEWHEN[id]='a'THEN[笔数]ELSENULLEND)AS'a.笔数',
MAX(CASEWHEN[id]='b'THEN[金额]ELSENULLEND)AS'b.金额',
MAX(CASEWHEN[id]='b'THEN[笔数]ELSENULLEND)AS'b.笔数',
MAX(CASEWHEN[id]='c'THEN[金额]ELSENULLEND)AS'c.金额',
MAX(CASEWHEN[id]='c'THEN[笔数]ELSENULLEND)AS'c.笔数',
MAX(CASEWHEN[id]='d'THEN[金额]ELSENULLEND)AS'd.金额',
MAX(CASEWHEN[id]='d'THEN[笔数]ELSENULLEND)AS'd.笔数',
MAX(CASEWHEN[id]='e'THEN[金额]ELSENULLEND)AS'e.金额',
MAX(CASEWHEN[id]='e'THEN[笔数]ELSENULLEND)AS'e.笔数'
FROM表XXXGROUPBY[date];
㈣ 怎么样将sql查询出来的多行数据变成一行多列
sql查询结果如果只有一条,就会显示一行,行数代表了结果数,列数的多少取决于你所查询的字段数。
㈤ sql多行多列合并成一行多列,
您好利用分析函数 sum max min 等均可实现此功能(oracle 中 空值不参与大小比较(11g是这样的 其他版本需要你自己测试相爱))
如:
select 产品, max(标价),max(二标价),max(三标价) from table group by 产品;
或者
select 产品, sum(标价)),sum(二标价),sum(三标价) from table group by 产品;
㈥ sql 行数据转换成多列
用存储过程和临时表实现吧,代码给你了
CREATE PROCEDURE [dbo].[sp_test]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @A nvarchar(50)
DECLARE @B nvarchar(200)
DECLARE @Btmp nvarchar(200)
DECLARE @charindex int
CREATE TABLE #tem
(
colA nvarchar(50) NULL,
colB nvarchar(50) NULL,
)
DECLARE curRecord CURSOR FOR
SELECT cola,colb from testtable
OPEN curRecord
FETCH NEXT FROM curRecord INTO @A,@B
WHILE @@fetch_status=0
BEGIN
SELECT @charindex=charindex(',',@B),@Btmp=@B
while (@charindex)>0
begin
insert into #tem
select @A,substring(@Btmp,1,@charindex-1)
select @Btmp=substring(@Btmp,@charindex+1,len(@Btmp))
select @charindex=charindex(',',@Btmp)
end
FETCH NEXT FROM curRecord INTO @A,@B --将游标向下移1
END
CLOSE curRecord --关闭游标
DEALLOCATE curRecord
select * from #tem
DROP TABLE #tem
END
㈦ sql中一对多关系的查询结果的多行转换成一行多列
1、创建测试表,
create table test_fee(userid number, feeid number, fee number);