sqlserver行转列

sqlserver行转列/列转行

1.sqlserver行转列

行转列使用pivot。

2.sqlserver列转行

列转行使用列转行函数unpivot。
示例脚本如下所示

with temp as(
select  t1.DingHaoPici,
count(*) AS aNum,
sum(t1.fxwanzheng) as fxwanzheng,
sum(case when efa.avgDianZu between 0.3 and 0.4 then t1.fxwanzheng else 0 end) as [0.3-0.4],
sum(case when efa.avgDianZu between 0.4 and 0.5 then t1.fxwanzheng else 0 end) as [0.4-0.5],
sum(case when efa.avgDianZu between 0.5 and 0.6 then t1.fxwanzheng else 0 end) as [0.5-0.6],
sum(case when efa.avgDianZu between 0.6 and 0.7 then t1.fxwanzheng else 0 end) as [0.6-0.7],
sum(case when efa.avgDianZu between 0.7 and 0.8 then t1.fxwanzheng else 0 end) as [0.7-0.8],
sum(case when efa.avgDianZu between 0.8 and 0.9 then t1.fxwanzheng else 0 end) as [0.8-0.9],
sum(case when efa.avgDianZu between 0.9 and 1.0 then t1.fxwanzheng else 0 end) as [0.9-1.0],
sum(case when efa.avgDianZu between 1.0 and 1.1 then t1.fxwanzheng else 0 end) as [1.0-1.1],
sum(case when efa.avgDianZu between 1.1 and 1.2 then t1.fxwanzheng else 0 end) as [1.1-1.2],
sum(case when efa.avgDianZu between 1.2 and 1.3 then t1.fxwanzheng else 0 end) as [1.2-1.3],
sum(case when efa.avgDianZu between 1.3 and 1.4 then t1.fxwanzheng else 0 end) as [1.3-1.4],
sum(case when efa.avgDianZu between 1.4 and 1.5 then t1.fxwanzheng else 0 end) as [1.4-1.5],
sum(case when efa.avgDianZu between 1.5 and 1.6 then t1.fxwanzheng else 0 end) as [1.5-1.6],
sum(case when efa.avgDianZu between 1.6 and 1.7 then t1.fxwanzheng else 0 end) as [1.6-1.7],
sum(case when efa.avgDianZu between 1.7 and 1.8 then t1.fxwanzheng else 0 end) as [1.7-1.8],
sum(case when efa.avgDianZu between 1.8 and 1.9 then t1.fxwanzheng else 0 end) as [1.8-1.9],
sum(case when efa.avgDianZu between 1.9 and 2.0 then t1.fxwanzheng else 0 end) as [1.9-2.0],
sum(case when efa.avgDianZu between 2.0 and 2.1 then t1.fxwanzheng else 0 end) as [2.0-2.1],
sum(case when efa.avgDianZu between 2.1 and 2.2 then t1.fxwanzheng else 0 end) as [2.1-2.2],
sum(case when efa.avgDianZu between 2.2 and 2.3 then t1.fxwanzheng else 0 end) as [2.2-2.3],
sum(case when efa.avgDianZu between 2.3 and 2.4 then t1.fxwanzheng else 0 end) as [2.3-2.4],
sum(case when efa.avgDianZu between 2.4 and 2.5 then t1.fxwanzheng else 0 end) as [2.4-2.5],
sum(case when efa.avgDianZu between 2.5 and 2.6 then t1.fxwanzheng else 0 end) as [2.5-2.6],
sum(case when efa.avgDianZu between 2.6 and 2.7 then t1.fxwanzheng else 0 end) as [2.6-2.7],
sum(case when efa.avgDianZu between 2.7 and 2.8 then t1.fxwanzheng else 0 end) as [2.7-2.8],
sum(case when efa.avgDianZu between 2.8 and 2.9 then t1.fxwanzheng else 0 end) as [2.8-2.9],
sum(case when efa.avgDianZu between 2.9 and 3.0 then t1.fxwanzheng else 0 end) as [2.9-3.0],
sum(case when efa.avgDianZu between 3.0 and 3.1 then t1.fxwanzheng else 0 end) as [3.0-3.1],
sum(case when efa.avgDianZu between 3.1 and 3.2 then t1.fxwanzheng else 0 end) as [3.1-3.2],
sum(case when efa.avgDianZu between 3.2 and 3.3 then t1.fxwanzheng else 0 end) as [3.2-3.3],
sum(case when efa.avgDianZu between 3.3 and 3.4 then t1.fxwanzheng else 0 end) as [3.3-3.4],
sum(case when efa.avgDianZu between 3.4 and 3.5 then t1.fxwanzheng else 0 end) as [3.4-3.5],
sum(case when efa.avgDianZu between 3.5 and 3.6 then t1.fxwanzheng else 0 end) as [3.5-3.6]
from 
 VF_TongJi_All1 t1 
 left join ETL_FX_AVG efa ON t1.daoCodeTime =efa.daoCodeTime AND t1.zuhao =efa .zuhao 
 where  1=1
 -- and t1.xqOpeDate >= '2023-01-01'
 and efa.daoCodeTime is not null
 AND efa.avgDianZu IS NOT NULL
-- AND t1.DingHaoPici='22C23BTC'
 AND t1.DingHaoPici='${pici}'
 group by t1.DingHaoPici
 )
 select DingHaoPici,aNum,fxwanzheng,qujian,dNumm,CONVERT(decimal(18,2),dNumm*1.0/fxwanzheng) AS LV
 from temp
 unpivot (dNumm for qujian in([0.3-0.4],[0.4-0.5],[0.5-0.6],[0.6-0.7],[0.7-0.8],[0.8-0.9],[0.9-1.0],[1.0-1.1],
 [1.1-1.2],[1.2-1.3],[1.3-1.4],[1.4-1.5],[1.5-1.6],[1.6-1.7],[1.7-1.8],[1.8-1.9],[1.9-2.0],[2.0-2.1],[2.2-2.3],
 [2.3-2.4],[2.4-2.5],[2.6-2.7],[2.7-2.8],[2.8-2.9],[2.9-3.0],[3.0-3.1] ,[3.1-3.2],[3.2-3.3],[3.3-3.4],[3.4-3.5],[3.5-3.6]
 ))
 s
 where dNumm>0
 order by DingHaoPici
 ;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL Server中,行转列是一种将表中的行数据转换为列数据的操作。根据提供的引用内容,我们可以使用PIVOT函数来实现行转列操作。首先,创建一个临时表#USER,并插入一些数据。然后使用PIVOT函数将科目列转换为新的列名,并将分数作为对应列的值。最后,使用GROUP BY语句按照姓名进行分组,并使用MAX函数获取每个科目的最大值。下面是一个示例的行转列SQL查询语句: CREATE TABLE #USER ( name NVARCHAR(100), 科目 NVARCHAR(100), 分数 DECIMAL(18,2) ) INSERT INTO #USER (name, 科目, 分数) VALUES ('张三', '语文', 100), ('张三', '英语', 80), ('张三', '数学', 60), ('张三', '物理', 70) SELECT newtemp.name, MAX(newtemp.语文) 语文, MAX(newtemp.英语) 英语, MAX(newtemp.数学) 数学, MAX(newtemp.物理) 物理 FROM #USER s PIVOT ( MAX(分数) FOR 科目 IN (语文, 英语, 数学, 物理) ) AS newtemp GROUP BY newtemp.name 这样的处理方法有助于简化前后端的处理,直接查询转换后的固定列和实体即可,无需再编写大量的特殊处理方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQL Server 行转列](https://blog.csdn.net/qq_45619623/article/details/126529707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值