我在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