写sql,怎么将查询结果的行列转换呀

写sql,怎么将查询结果的行列转换呀,第1张

例如表cj

名字 科目 分数

A 语文 100

A 数学 90

A 外语 99

B 语文 90

B 数学 80

B 外语 100

方法 (一)

select from cj

select 名字, max(case 科目 when '语文' then 分数 else 0 end ) 语文,

max(case 科目 when '数学' then 分数 else 0 end ) 数学,

max(case 科目 when '外语' then 分数 else 0 end ) 外语

from cj

group by 名字

方法 (二)

declare @sql varchar(800)

set @sql='select 名字'

select @sql =@sql+', max(case 科目 when '''+科目+''' then 分数 else 0 end )['+科目+']'

from (select distinct 科目 from cj ) as a

set @sql=@sql+'from cj group by 名字'

exec(@sql)

结果:

名字 语文 数学 外语

A 100 90 99

B 90 80 100

declare @maxcount int;

declare @i int;

declare @sql nvarchar(max);

select @maxcount=max(C) from (select 采购商,count() C from table1 group by 采购商) a

print @maxcount

set @i=1;

set @sql='select distinct 采购商,(select max(商品) from table1 b where b采购商=a采购商) 商品1'

while @i<@maxcount

begin

set @sql=@sql+', (select max(商品) from table1 b where b采购商=a采购商 and 商品 not in (select top '+ cast(@i as nvarchar(4))+' 商品 from table1 c where b采购商=c采购商 order by 商品 desc)) 商品' + cast(@i+1 as nvarchar(4))

set @i=@i+1

end

set @sql=@sql+' from table1 a'

exec(@sql)

恩问题是这样的问题,一般行列转换我们不在代码里面转换,而是在数据库里面转换

你的datatable数据也是来源于数据库的

我们先创建表

--我们使用Num来代替时间 

create table tb_time(Name varchar(10) , Num INT)

--加入测试数据

INSERT INTO tb_time values('A',2)

INSERT INTO tb_time values('A',3)

INSERT INTO tb_time values('A',4)

INSERT INTO tb_time values('B',2)

INSERT INTO tb_time values('B',5)

INSERT INTO tb_time values('C',2)

--行列转换sql语句

SELECT NAME AS 名称, MIN(num)AS 开始数值,

case count(num)

WHEN 1 THEN NULL

WHEN 0 THEN NULL

    ELSE MAX(num)

    END

 AS 结束数值 FROM tb_time

GROUP BY NAME

--测试结果

名称 开始数值 结束数值

A 2 4

B 2 5

C 2 NULL

在你这里,把我测试的Num 这列换成时间列 就可以了

网站。

数据库管理系统。

数据库。一个DBMS通常接管多个数据库,因为网站需要,你不可能只有一个数据库。

数据库的表。

数据库的表的行和列。它们只存在于关系型数据库中。你可以把列看成是特定对象的属性,而行则代表了每个特定对象。矩阵学过吧,类比理解那个行列。数据库的行和列是密不可分的。

举个例子:ni={"name":"Xiaoming","age":100}

这里,你就是一个对象,代表一行。这一行的每一列都代表了你的一个属性,分别是name,age

1、跟是否临时表没有关系。

2、SELECT列表中的转出字段,也要加上[]

3、加上DQ字段

SELECT DQ

    ,[42周]

    ,[43周]

        ,[44周]

   ,[45周]

   ,[46周]

   ,[47周]

FROM #TEMPDBF 

PIVOT( SUM(TEU) FOR 

周 IN ([42周], [43周], [44周], [45周], [46周],[47周]) 

) b

以上就是关于写sql,怎么将查询结果的行列转换呀全部的内容,包括:写sql,怎么将查询结果的行列转换呀、请教一个关于SQL行列转置的问题。、C# DataTable行转列并合并重复列。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9865867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存