当前位置:首页 » 编程语言 » sql横列变成竖列
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql横列变成竖列

发布时间: 2022-03-07 19:58:06

sql 横表变竖表 动态语句怎么写

1、首先 日期没有出现在Group里
2、其次,组成动态的【,isnull(sum(...))】没有去掉最前面的那个逗号
3、感觉这个语句肯定不会执行成功,最好你把表结构给出,并且给出示例结果来。

② SQL 竖列 转换横列的问题

使用CASE来处理。

select 编号, sum( 第一季度第一次施肥量) 第一季度第一次施肥量, sum( 第一季度第二次施肥量) 第一季度第二次施肥量, sum( 第二季度第一次施肥量) 第二季度第一次施肥量
from
(
select 编号
case when 季度=1 and 施肥次数=1 then 施肥量 else null end 第一季度第一次施肥量,
case when 季度=1 and 施肥次数=2 then 施肥量 else null end 第一季度第二次施肥量,
case when 季度=2 and 施肥次数=1 then 施肥量 else null end 第二季度第一次施肥量
from 表
) a
group by a.编号

③ 关于sql server 竖列变横列显示问题。

使用case when 和group by 的语法。
或是使用pivot(sql 2005及后续版本支持)

④ SQL数据横列变竖列

以下方法适用于任意多的科目:
--先建立函数,功能是根据给出的姓名,到表中去查找所选科目及成绩并横向列示出来.
CREATE FUNCTION getcoldata
(@XM VARCHAR(18))
RETURNS varchar(1000)
AS
BEGIN
DECLARE @deli VARCHAR(2)
set @deli=' '
declare @f1 varchar(100),@F2 DECIMAL(12,1),@result varchar(1000),@sn0 int
set @result=''
declare ddcursor cursor for select 选修科目,成绩 from 表名 where 姓名=@XM order by 选修科目
open ddcursor
fetch next from ddcursor into @f1,@F2
while @@fetch_status!=-1
begin
set @result=@result+@deli+isnull(@f1,'')+':'+ISNULL(CONVERT(VARCHAR,@F2),'')
fetch next from ddcursor into @f1,@F2
end
close ddcursor
deallocate ddcursor
return (@result)
end

GO

--使用方法:
select 姓名,科目及成绩=dbo.getcoldata(姓名) from (SELECT DISTINCT 姓名 from 表名) a

结果是这样的
姓名 科目与成绩
张三 计算机:75 高等数学:80 物理:77
李四 高等数学:55 微积分:87
王五 语文:78

=============
我这么看您的问题:
1.查询是用来输出的,不是用来统计的:您的这种结果即使用分开字段也是很不容易统计的,要想统计还是原表比较方便.
就是说:这种查询结果更方便输出\查看,原表更方便于作统计.
所以,我劝您,比较科学的作法是保留原表,可以方便的作出包括本查询在内的各种查询.而您如果只保留查询后的表,即使用字段是分开的,那么将很难再作其它统计和查询.因为数据太不规范.

2.可以输出各门分开的EXCEL表:如果您想输出到EXCEL表,您要以把函数中的分隔符改成逗点或制表符(CHAR(9)),直接存成CSV或XLS文档就成了.
3.完全按照您的结果也能输出.但今天我没空了,给你个提示:
先看看我以前的回答中,有一些是关于加序号的,加上序号后就好说了.
===========
加到200分,我就开始为您作分开字段的查询.(办法我知道,但是很麻烦啊)
===============================================
与您的要求完全相同的查询:
为了清楚,先建立一个查询,给每人的科目加序号,如果不理解,执行一下SELECT * FROM MYVIEWNAME就知道了:
=====================

视图改一下:
create view myviewname
as
select 姓名,科目,成绩,序号=(select count(1) from tablename a where a.姓名=b.姓名 and a.科目>=b.科目) from
(select * from tablename where 状态='有效') --以子查询替换了TABLENAME,够直观吧?
b --视图加上了序号字段
go

然后,这就是您要的查询,根据每人所选科目的最大数,可以无限向后延伸,加入科目6,科目7等:
select a.姓名,
科目1=isnull(t1.科目,''),
成绩1=isnull(t1.成绩,''),
科目2=isnull(t2.科目,''),
成绩2=isnull(t2.成绩,''),

科目3=isnull(t3.科目,''),
成绩3=isnull(t3.成绩,''),

科目4=isnull(t4.科目,''),
成绩4=isnull(t4.成绩,''),

科目5=isnull(t5.科目,''),
成绩5=isnull(t5.成绩,'')
from (SELECT DISTINCT 姓名 from tablename) a
left join myviewname t1 on t1.姓名=a.姓名 and t1.序号=1
left join myviewname t2 on t2.姓名=a.姓名 and t2.序号=2
left join myviewname t3 on t3.姓名=a.姓名 and t3.序号=3
left join myviewname t4 on t4.姓名=a.姓名 and t4.序号=4
left join myviewname t5 on t5.姓名=a.姓名 and t5.序号=5

好了,加到200分再选择正确答案!

⑤ Sql语句查询问题,如何将横排的数据变为竖排

select*from
(
select PartNO , Year,Month='Jan' , Result = Jan from tb1
unionall
select PartNO , Year,Month ='Feb' , Result = Feb from tb1
unionall
select PartNO , Year,Month='Mar' , Result = Mar from tb1
) t
orderby PartNO, case Month when'Jan' then1when'Feb'then 2 when'Mar' then3 end

⑥ SQL里面如何将竖着的列横着显示

一般这样的情况
如果是我做的话
就预先建立一个表
设置time1
time1
time3……
然后
分别逐次以
no
和日期为
time
分组
;行标题
time
为列标题

值(求和)……对先前建立的表进行追加……
SQL
我不太熟悉
在access

完全可以做的……
还有
如果
你能够
把你的时间
划分成不同的时间段
而对应到固定的时间段中的话,完全
直接可以使用
一个交叉查询就可以了……
但愿
这个提示
对你有所帮助……

⑦ sql里边怎么竖列变横列,

这个最好在一个存储过程中完成。因为每个“分组值”的多少不同。比如PF66152210L有两个,有些就有三个,谁知道最多有多少个,以前写过一个,是用过程完成的。

  1. 加特征码

    用row_number() over 并将这个字段命名为rows

    按照f1分组,然后,这样能在后面加上1,2,3,.....,不用排序,分组就行

  2. 利用case when

    在刚才那个查询结果的外面包一层,利用(case when rows=1 then f2 end)h2,(case when rows=2 then f2 end)h3,....... group by f1

    你试试吧,应该可以。

  3. 如果,f2在一行里边,中间用,隔开也可以
    那么就用 wmsys.wm_concat就行了。(不过我说的是oracle库啊)

⑧ SQL 横排变竖排的问题

给例子远比你贴代码快,

SELECT name,
SUM(CASE subject WHEN '语文' THEN Result ELSE 0 END),
SUM(CASE subject WHEN '数学' THEN Result ELSE 0 END),
SUM(CASE subject WHEN '物理' THEN Result ELSE 0 END)
FROM tb
GROUP BY Name

⑨ 一张收款表,SQL数据横列变竖列

可以先

select 一下 插入临时表 做个汇总
例如:
select sum(要汇总的字段) as 字段名 into #临时表 from 表名

然后再 按 行转列的方法 转换

http://blog.sina.com.cn/s/blog_4cca663f0100abfv.html
这里有 很详细的 方法 看看吧

⑩ SQL 怎么把横向数据变成竖向数据

随缘写法···可能有更精简的,我这就赶着想赶着写的 你看看能看懂不,如果觉得对不懂可以联系我

select
nn.客户 客户,
nn.昵称 昵称,
nn.补单日期1 补单日期1,
nn.业务员1 业务员1,
nn.补单日期2 补单日期2,
nn.业务员2 业务员2,
nn.补单日期3 补单日期3,
nn.业务员3 业务员3,
nn.补单日期4 补单日期4,
nn.业务员4 业务员4,
nn.业务员1 首选业务员,
nn.业务员2||'-'||nn.业务员3||'-'||nn.业务员4 候选业务员
from (
select tt.a2 客户,tt.a3 昵称,wm_concat (case when tt.top=0 then tt.a0 else '' end) 补单日期1,
wm_concat (case when tt.top=0 then tt.a4 else ''end) 业务员1,
wm_concat (case when tt.top=1 then tt.a0 else ''end) 补单日期2,
wm_concat (case when tt.top=1 then tt.a4 else ''end) 业务员2,
wm_concat (case when tt.top=2 then tt.a0 else ''end) 补单日期3,
wm_concat (case when tt.top=2 then tt.a4 else ''end) 业务员3,
wm_concat (case when tt.top=3 then tt.a0 else''end) 补单日期4,
wm_concat (case when tt.top=3 then tt.a4 else ''end) 业务员4
from
(
select zz.* from
(
select a.*,(select count(1) from a a1 where a1.a2=a.a2 and a.a0<a1.a0) top from a ORDER BY A2,A0 DESC
) zz
where
zz.top<4
) tt group by tt.a2,tt.a3
) nn