Dynamic pivot in SQL Server(SQL Server 中的动态数据透视)
本文介绍了SQL Server 中的动态数据透视的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对枢轴的输出有疑问.我需要它以我想要的形式来合并表.
I have problem with output from pivot. I need it in my desired form to coalesence tables.
我的结果:
us_id Phone Mail
1 555121313 NULL
1 NULL LoginOne@mail.com
2 14124124 NULL
2 NULL LoginTwo@mail.com
期望的输出:
us_id Phone Mail
1 555121313 LoginOne@mail.com
2 14124124 LoginTwo@mail.com
测试脚本:
create table #user (us_id int, us_login varchar(255))
INSERT INTO #user VALUES (1, 'LoginOne')
INSERT INTO #user VALUES (2, 'LoginTwo')
create table #atr_type (at_id int, at_name varchar(255))
insert into #atr_type values (1,'Phone');
insert into #atr_type values (2,'Mail')
create table #atr (atr_id int, atr_us_id int, atr_at_id int, atr_value varchar(255))
insert into #atr values(1,1,1,'555121313')
insert into #atr values(2,1,2,'LoginOne@mail.com')
insert into #atr values(3,2,1,'14124124')
insert into #atr values(4,2,2,'LoginTwo@mail.com')
我的动态枢轴代码:
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N',' + QUOTENAME(at_name)
FROM ( SELECT at_name
FROM #atr_type) AS x;
select @columns
declare @cmd varchar(max)
set @cmd = '
SELECT us_id'+@columns+'
FROM #user inner join #atr on atr_us_id = us_id
inner join #atr_type on at_id = atr_at_id
PIVOT (
MIN(atr_value) FOR at_name IN
('
set @columns = RIGHT(@columns, LEN(@columns)-1)
set @cmd += @columns + ')
) AS PT'
exec (@cmd)
推荐答案
试试这个:
DECLARE
@columns NVARCHAR(1000) = ''
, @columns2 NVARCHAR(1000) = ''
, @sql NVARCHAR(MAX)
SELECT
@columns += N', [' + at_name + ']'
, @columns2 += N', [' + at_name + '] = MAX([' + at_name + '])'
FROM #atr_type
SET @sql = '
SELECT us_id' + @columns2 + '
FROM #user inner join #atr on atr_us_id = us_id
join #atr_type on at_id = atr_at_id
PIVOT (
MIN(atr_value) FOR at_name IN
(' + STUFF(@columns, 1,1,'') + ')
) AS PT
Group by us_id'
EXEC sp_executesql @sql
这篇关于SQL Server 中的动态数据透视的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:SQL Server 中的动态数据透视


基础教程推荐
猜你喜欢
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01