sql Server 中 把一个表中列当做表头 另一列当做数据

qq_38155668 2017-10-23 02:34:17
我想把下面表二的money数据,填入到表一,通过payType=表一的列名,有没有谁做过,表一中无对应的默认为0.
...全文
1537 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
心若芷梦 2019-02-20
  • 打赏
  • 举报
回复
如果用Oracle如何实现呢
道素 2017-11-03
  • 打赏
  • 举报
回复

if not object_id(N'Tempdb..#T') is null drop table #T
Create table #T([PaySerID] int,[PayType] nvarchar(25),[Money] int)
Insert #T
select 1,N'现金',10 union ALL
select 1,N'现金',20 union all
select 1,N'刷卡',2555 union all
select 1,N'支付宝',300 union all
select 1,N'微信',1000 union all
select 2,N'花呗',5 union all
select 2,N'团会员支出',6 union all
select 2,N'积分',778 union all
select 2,N'团购',890 union all
select 2,N'测试',900 union all
select 2,N'转账',1012 union all
select 3,N'团会员支出',110 union all
select 3,N'积分',120 union all
select 3,N'团购',130 union all
select 3,N'测试',14 union all
select 3,N'转账',15
GO
SELECT * FROM (
   SELECT [PayType],[money] FROM #T 
) AS t
PIVOT(SUM(Money) FOR PayType IN ([支付宝],[微信],[花呗],[团会员支出],[现金],[积分],[团购],[刷卡],[测试],[转账])) p

+-----+------+----+-------+----+-----+------+------+-----+------+
| 支付宝 | 微信   | 花呗 | 团会员支出 | 现金 | 积分  | 团购   | 刷卡   | 测试  | 转账   |
+-----+------+----+-------+----+-----+------+------+-----+------+
| 300 | 1000 | 5  | 116   | 30 | 898 | 1020 | 2555 | 914 | 1027 |
+-----+------+----+-------+----+-----+------+------+-----+------+
听雨停了 2017-10-23
  • 打赏
  • 举报
回复
引用 6 楼 qq_38155668 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:]
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([PaySerID] int,[PayType] nvarchar(25),[Money] int)
Insert #T
select 1,N'现金',1 union all
select 1,N'刷卡',2 union all
select 1,N'支付宝',3 union all
select 1,N'微信4',null union all
select 2,N'花呗',5 union all
select 2,N'团会员支出',6 union all
select 2,N'积分',7 union all
select 2,N'团购',8 union all
select 2,N'测试',9 union all
select 2,N'转账',10 union all
select 3,N'团会员支出',11 union all
select 3,N'积分',12 union all
select 3,N'团购',13 union all
select 3,N'测试',14 union all
select 3,N'转账',15
Go
--测试数据结束
declare @sql varchar(8000)
set @sql='select PaySerID'
select @sql=@sql+' , max(case PayType when '''+ [PayType] +''' then Money else 0 end) ['+ [PayType] +']'
from (select distinct [PayType] from #T) as a
set @sql=@sql+' from #T group by PaySerID'
exec(@sql) 

我把这个先拆成了多个表然后在进去关联这样怎么样啊[/quote] 这样是比较笨的方法,不过逻辑上也是可以的,没有问题的
qq_38155668 2017-10-23
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([PaySerID] int,[PayType] nvarchar(25),[Money] int)
Insert #T
select 1,N'现金',1 union all
select 1,N'刷卡',2 union all
select 1,N'支付宝',3 union all
select 1,N'微信4',null union all
select 2,N'花呗',5 union all
select 2,N'团会员支出',6 union all
select 2,N'积分',7 union all
select 2,N'团购',8 union all
select 2,N'测试',9 union all
select 2,N'转账',10 union all
select 3,N'团会员支出',11 union all
select 3,N'积分',12 union all
select 3,N'团购',13 union all
select 3,N'测试',14 union all
select 3,N'转账',15
Go
--测试数据结束
declare @sql varchar(8000)
set @sql='select PaySerID'
select @sql=@sql+' , max(case PayType when '''+ [PayType] +''' then Money else 0 end) ['+ [PayType] +']'
from (select distinct [PayType] from #T) as a
set @sql=@sql+' from #T group by PaySerID'
exec(@sql)











我把这个先拆成了多个表然后在进去关联这样怎么样啊
听雨停了 2017-10-23
  • 打赏
  • 举报
回复
引用 4 楼 qq_38155668 的回复:
[quote=引用 2 楼 qq_37170555 的回复:] 你是要以表二的payType分组统计money的和,然后再根据payType填入表一是吧。解决方案就是把表二的数据先汇总,然后把payType行转列显示出来,最后update表一的时候关联一下行转列出来的结果集就搞定了
不是统计哦就是直接赋值不过也差不多[/quote] 都差不多。不统计就不用分组求和了,只需要做后面的就可以了
qq_38155668 2017-10-23
  • 打赏
  • 举报
回复
引用 2 楼 qq_37170555 的回复:
你是要以表二的payType分组统计money的和,然后再根据payType填入表一是吧。解决方案就是把表二的数据先汇总,然后把payType行转列显示出来,最后update表一的时候关联一下行转列出来的结果集就搞定了
不是统计哦就是直接赋值不过也差不多
qq_38155668 2017-10-23
  • 打赏
  • 举报
回复
我试试看哦
听雨停了 2017-10-23
  • 打赏
  • 举报
回复
你是要以表二的payType分组统计money的和,然后再根据payType填入表一是吧。解决方案就是把表二的数据先汇总,然后把payType行转列显示出来,最后update表一的时候关联一下行转列出来的结果集就搞定了
二月十六 2017-10-23
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([PaySerID] int,[PayType] nvarchar(25),[Money] int)
Insert #T
select 1,N'现金',1 union all
select 1,N'刷卡',2 union all
select 1,N'支付宝',3 union all
select 1,N'微信4',null union all
select 2,N'花呗',5 union all
select 2,N'团会员支出',6 union all
select 2,N'积分',7 union all
select 2,N'团购',8 union all
select 2,N'测试',9 union all
select 2,N'转账',10 union all
select 3,N'团会员支出',11 union all
select 3,N'积分',12 union all
select 3,N'团购',13 union all
select 3,N'测试',14 union all
select 3,N'转账',15
Go
--测试数据结束
declare @sql varchar(8000)
set @sql='select PaySerID'
select @sql=@sql+' , max(case PayType when '''+ [PayType] +''' then Money else 0 end) ['+ [PayType] +']'
from (select distinct [PayType] from #T) as a
set @sql=@sql+' from #T group by PaySerID'
exec(@sql)



27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧