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

行转列sql

发布时间: 2022-01-29 04:38:50

sql Server中一个行转列的SQL

select 姓名 ,sum(case 科目 when '语文' then 分数 else 0 end) as 语文
,sum(case 科目 when '数学' then 分数 else 0 end) as 数学

from 表 group by 姓名

其他的照样加进去

② sql 行转列 这SQL改如何写

14
SELECT
`Acc_dte`,
MAX(IF(trx_amt>0,trx_amt,null)) AS a1,
MAX(IF(trx_amt<0,abs(trx_amt),null)) AS a2
FROM tbl_data
GROUP BY `Acc_dte`

15
SELECT `table2`.`dep_nam`,
MAX(IF(`Yer_mon`='201301',`Yer_mon`,NULL)) AS '201301',
MAX(IF(`Yer_mon`='201302',`Yer_mon`,NULL)) AS '201302',
MAX(IF(`Yer_mon`='201302',`Yer_mon`,NULL)) AS '201302'
FROM `table2`
LEFT JOIN `table1` ON `table2`.`dep_nbr` =`table1`.`dep_nbr`
WHERE 1
GROUP BY `table2`.`dep_nam`

③ 行转列,列转行怎么做sql

/*行转列*/
SELECT*FROM[StudentScores]/*数据源*/ASP
PIVOT
(SUM(Score/*行转列后列的值*/)FOR
p.Subject/*需要行转列的列*/IN([语文],[数学],[英语],[生物]/*列的值*/)
)AST
/*列转行*/
SELECTP.ProgrectName,P.Supplier,P.SupplyNumFROM(SELECTProgrectName,OverseaSupply,NativeSupply,
SouthSupply,NorthSupplyFROMProgrectDetail
)T
UNPIVOT
(
SupplyNumFORSupplierIN
(OverseaSupply,NativeSupply,SouthSupply,NorthSupply)
)P

④ sql语句行转列 怎么转啊

--声明变量

declare@sqlvarchar(1000),@num_dataint,@num_allvarchar(2000),@num_numint,@table_sqlvarchar(2000)

set@num_num=0

--判断并创建表

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[records]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[records]

createtablerecords(

[id]int,

[name]varchar(50),

[sex]varchar(10),

[num]int

)

--插入数据

insertintorecordsvalues(1,'tom','男',2)

insertintorecordsvalues(1,'tom','男',3)

insertintorecordsvalues(1,'tom','男',4)

insertintorecordsvalues(1,'tom','男',5)

--全选表中数据

select*fromrecords

--全选num列数据

selectnumas'数据'fromrecords

--释放游标

deallocateselect_num

--为‘selectnumfromrecords’建立游标

declareselect_numscrollcursorforselectnumas'shuju'fromrecords

--打开游标

openselect_num

--获得第一条数据

fetchnextfromselect_numinto@num_data

set@num_all=convert(varchar,@num_data)+','

set@num_num=@num_num+1;

--如果获取成功,继续获得数据

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@num_num=@num_num+1;

set@num_all=@num_all+convert(varchar,@num_data)+','

end

--关闭游标

closeselect_num

print@num_num

--set@num_num=@num_num-1;

declare@iint

set@i=1

print@num_num

print@i

set@table_sql='createtablenumall(idint,namevarchar(50),sexvarchar(10)'

print@table_sql

while@num_num>=1

begin

set@table_sql=@table_sql+',num'+convert(varchar,@i)+'int'

set@num_num=@num_num-1;

set@i=@i+1

end

set@table_sql=@table_sql+')'

print@table_sql

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[numall]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[numall]

exec(@table_sql)

declare@insert_sqlvarchar(2000)

set@insert_sql='insertintonumallvalues(1,'+'''tom'','+'''男'''

print@insert_sql

openselect_num

--获得第一条数据

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

--如果获取成功,继续获得数据

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

end

set@insert_sql=@insert_sql+')'

print@insert_sql

exec(@insert_sql)

--insertintonumallvalues(1,'tom','男',2,3,4,5,5)

select*fromnumall

试试吧,数据虽然有点出入,但已经说明问题了!!!

⑤ sql server 行转列

创建测试表

createtabletest
(_keyvarchar(10),
_valuevarchar(10),
idint)

insertintotestvalues('ceshi','测试值',10)
insertintotestvalues('ceshi','测试值',11)
insertintotestvalues('ceshi2','测试值2',11)

执行

declare@sqlvarchar(4000)
set@sql='selectid'
select@sql=@sql+',max(case_keywhen'''+[_key]+'''then[_value]end)as
['+_key+']'
from(selectdistinct_keyfromtest)asa
select@sql=@sql+'fromtestgroupbyid'
exec(@sql)

结果


额,我那个第三条数据id写错了,不过方法还是这个

⑥ sql 行转列

最简答的方法:使用程序数组,例如你现在的代码是:
do while not rs.eof
response.write rs("....")
rs.movenext
end do

那么可以下面这样输出:
'先为每个字段定义数组
dim a(1)
dim b(1)
n=1
do while not rs.eof
a(n)=rs("a")
b(n)=rs("b")
'...有多少字段写多少行....
n=n+1
rs.movenext
end do
'下面再输出
response.write "<table>";
response.write "<tr><td>" & join("<td>",a)
response.write "<tr><td>" & join("<td>",b)
response.write "</table>";

你的ASP程序不可能显示多少条,一般每页显示20条左右,用数组在显示的转换是可行的。

⑦ sql行转列

SELECT e.NAME as name,
count(case when DATEPART(year,c.START_TIME)=2014 then 1 else null end ) as count2014,
count(case when DATEPART(year,c.START_TIME)=2015 then 1 else null end ) as count2015
from ENVI_DATA_STATISTIC_COMP c
LEFT JOIN ENVI_CITY e on e.CITY_ID=c.CITY_ID
where c.COMP_NAME like '%蓝天白云%' and INDEX_TYPE='12'
and (c.START_TIME like '%2014-08%' or c.START_TIME like '%2015-08%' ) and STATISTIC_TYPE='1' and c.VALID_FLAG='1'
group by name

应该是酱紫的,使用case when 转换~

⑧ SQL语句行转列

根据楼主的描述,特为楼主总结如下,在SqlServer里面行列转换的语法一般是: select 字段, sum(case when 要转换的行单元格的字段名='行字段内容' then 聚合的字段名 end ) as 自定义的列标题1 from 表的名字 group by 字段(注意,分组聚合就是根据这个字段来的,具体到楼主的问题,这里的字段就应该是org_id) 如果有多个列,之间用逗号隔开就可以了,最后一个参数和from之间不要用逗号。 具体到楼主的显示效果就可以这样写了。代码参考如下: Select org_id , sum(case when channel ='团险' then PREM end) As '团险保费' , sum(case when channel ='个险' then PREM end) As '个险保费 From 你的表名 Group By org_id

⑨ sql 用select语句进行行转列

我们来看看一个小列子。有一个游戏玩家充值表(仅仅为了说明,举的一个小例子),

CREATETABLE[Inpours]
(
[ID]INTIDENTITY(1,1),
[UserName]NVARCHAR(20),--游戏玩家
[CreateTime]DATETIME,--充值时间
[PayType]NVARCHAR(20),--充值类型
[Money]DECIMAL,--充值金额
[IsSuccess]BIT,--是否成功1表示成功,0表示失败
CONSTRAINT[PK_Inpours_ID]PRIMARYKEY(ID)
)

INSERTINTOInpoursSELECT'张三','2010-05-01','支付宝',50,1

INSERTINTOInpoursSELECT'张三','2010-06-14','支付宝',50,1

INSERTINTOInpoursSELECT'张三','2010-06-14','手机短信',100,1

INSERTINTOInpoursSELECT'李四','2010-06-14','手机短信',100,1

INSERTINTOInpoursSELECT'李四','2010-07-14','支付宝',100,1

INSERTINTOInpoursSELECT'王五','2010-07-14','工商银行卡',100,1

INSERTINTOInpoursSELECT'赵六','2010-07-14','建设银行卡',100,1

下面来了一个统计数据的需求,要求按日期、支付方式来统计充值金额信息。这也是一个典型的行转列的例子。我们可以通过下面的脚本来达到目的

SELECT
CreateTime,[支付宝],[手机短信],
[工商银行卡],[建设银行卡]
FROM
(
SELECTCONVERT(VARCHAR(10),CreateTime,120)ASCreateTime,PayType,Money
FROMInpours
)P
PIVOT(
SUM(Money)
FORPayTypeIN
([支付宝],[手机短信],[工商银行卡],[建设银行卡])
)AST
ORDERBYCreateTime

⑩ sql server行转列

select * from (select week, totalprice from shoppingcart) pivot (sum(totalprice) for week in ('1','2', '3', '4','5','6','7'))