我在SQL Server 2012中有一个数据库表“table_name1”,以显示在一个单一的列值划分为多个和组创建的使用:如何通过另一列
CREATE TABLE table_name1 (
created_date date,
complete_hour int,
col_percent float
);
INSERT INTO table_name1 values
('2017-06-14', 8, 0.3),
('2017-06-14', 9, 1.96),
('2017-06-14', 10, 3.92),
('2017-06-07', 8, 0.17),
('2017-06-07', 9, 2.87),
('2017-06-07', 10, 3.72),
('2017-05-31', 7, 0.14),
('2017-05-31', 8, 0.72),
('2017-05-31', 9, 3.77),
('2017-05-31', 10, 5.8);
我想要做的就是结果,如:
created_date col1 col2 col3 col4
2017-06-14 BLANK 0.3 1.96 3.92
2017-06-07 BLANK 0.17 2.87 3.72
2017-05-31 0.14 0.72 3.77 5.8
我尝试使用支点和在table_name1行数会不断变化,我想我将不得不使用动态SQL。所以我尝试使用Efficiently convert rows to columns in sql server后的回答,但无法调整它来解决我的问题。有3列,而不是两个,我需要考虑,也必须由created_date分组。
我可以得到一些关于如何做到这一点的建议吗?
编辑:答案我想跟随的小修改后的版本是:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(col_percent)
from table_name1
group by created_date, complete_hour, col_percent
order by complete_hour
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' from
(
select created_date, col_percent
from table_name1
) x
pivot
(
max(created_date)
for col_percent in (' + @cols + N')
) p '
exec sp_executesql @query;
,并让结果为:
0.14 0.72 0.17 0.3 3.77 2.87 1.96 5.8 3.72 3.92
2017-05-31 2017-05-31 2017-06-07 2017-06-14 2017-05-31 2017-06-07 2017-06-14 2017-05-31 2017-06-07 2017-06-14
我知道我做错了,让我的期望输出,但是当我尝试更改数据透视表中的列名称时,我得到了一些其他更改,或者在“PIVOT”运算符中提供了“无效列名”或“不正确的值”0.14“。
你能告诉我们你的,你提到的答案的版本?为什么它不符合你想要的输出? – SchmitzIT
我编辑过的问题包括我试图调整的SQL版本,以便提供所需的结果。我不认为我理解它100%,但试图。 – 300