我有約會這樣的表作爲列名運動列名行
,但我想有一列,這些日期在多行是這樣的:
Date Index
20170806 9206
20170813 8041
20170820 8861
20170827 8356
我怎樣才能做到這一點在SQL Server
我有約會這樣的表作爲列名運動列名行
,但我想有一列,這些日期在多行是這樣的:
Date Index
20170806 9206
20170813 8041
20170820 8861
20170827 8356
我怎樣才能做到這一點在SQL Server
如果你想獲取更多動態的解決方案,而不是硬編碼的所有列,下面的腳本應該工作:在使用
IF OBJECT_ID('TestTable') IS NOT NULL
DROP TABLE TestTable;
CREATE TABLE TestTable
(
[20170806] INT NOT NULL,
[20170813] INT NOT NULL,
[20170820] INT NOT NULL,
[20170827] INT NOT NULL
)
INSERT INTO TestTable VALUES (9206, 8041, 8861, 8356)
DECLARE @cols NVARCHAR(MAX),
@sql NVARCHAR(MAX)
SELECT @cols = COALESCE(@cols + ',', '') + QUOTENAME(c.COLUMN_NAME)
FROM INFORMATION_SCHEMA.[COLUMNS] AS c
WHERE c.TABLE_NAME = 'TestTable'
SET @sql = '
SELECT [Date],
[Index]
FROM TestTable
UNPIVOT([Index] FOR [Date] IN ('+ @cols +')) AS up'
exec sp_executesql @sql;
您可以使用旋轉如:
但是,我不知道你的確切的表名
select field_names
from table_name
pivot
(index
for index in (Date, Index)
) pivot
但一個有用的製品,遵循的是
「https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx」
設計的表(可變)結構如下。 希望它匹配你的表格結構。
DECLARE @data TABLE
(
[20170806] INT,
[20170813] INT,
[20170820] INT,
[20170827] INT
)
INSERT INTO @data VALUES (9206, 8041, 8861, 8356)
SELECT * FROM @data
您可以使用UNPIVOT聲明。 If you have dynamic columns, check this。
SELECT [Date],[Index]
FROM
@data
UNPIVOT
(
[Index] FOR [Date] IN ([20170806], [20170813], [20170820], [20170827])
) AS unpivotTable;
和輸出
您可以使用UNPIVOT
這一點。
SELECT * FROM MyTable
UNPIVOT([Date] For [Index] IN([20170806], [20170813], [20170820], [20170827])) UNPVT
另外,如果你想動態地使用它,你也可以使用這個查詢。
DECLARE @ColNames NVARCHAR(MAX)
= STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
(SELECT T.* FROM (VALUES(1)) AS DUMY(ID) LEFT JOIN MyTable T ON 1=2 FOR XML AUTO, ELEMENTS XSINIL)
,'<T xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">','')
,'</T>','')
,'_x0032_','2')
,' xsi:nil="true"/>','] ')
,'<',',[') ,1,1,'')
DECLARE @SqlQ NVARCHAR(MAX)
= 'SELECT * FROM MyTable UNPIVOT([Date] For [Index] IN(' + @ColNames + ')) UNPVT'
EXEC sp_executesql @SqlQ
會更有用,如果你讓它動態。 –
看支點 - https://technet.microsoft.com /en-us/library/ms177410(v=sql.105).aspx。但是,在結構中有數據似乎會導致你很多悲傷。 – Leonidas199x