将数据列转换为SQL Server中的数据行

时间:2014-03-17 12:40:27

标签: sql sql-server pivot

我试图学习如何将数据从csv文件导入我的数据库,然后将其重新组织到我的表中。我已将一组非常简单的数据导入到名为'的表中。 CSVTest_Match'看起来像这样:

HEADER          DATA             --(Column Names)
--------------- --------------
Home Team       Barnsley
Away Team       Wigan
Kick Off Time   14:02
Kick Off Date   03/08/2013
Home Goals      0
Away Goals      4

此时两列中的值都是VARCHAR。我想将此数据转换为如下所示:

HOMETEAM   AWAYTEAM   KICKOFFTIME   KICKOFFDATE   HOMEGOALS   AWAYGOALS  -- (Column Names)
---------- ---------- ------------- ------------- ----------- ----------
Barnsley   Wigan      14:02         03/08/2013    0           4

此时,如果数据已根据需要转换为VARCHAR,DATETIME,TINYINT值,将会很有用。 我一直在努力弄清楚如何使用PIVOT这样做,所以我真的很感激一些帮助。

编辑:我终于明白了。所需的代码是:

SELECT * FROM 
(SELECT Header, Data FROM CSVTest_Match) AS T
PIVOT (Min(Data) FOR Header IN ([Home Team], [Away Team], [Kick Off Time], 
                [Kick Off Date], [Home Goals], [Away Goals])) AS T2

3 个答案:

答案 0 :(得分:0)

我不记得我从哪里滑过这里,可能来自这里,但是你走了,我已经使用了一段时间..这假设列'名称'是Indicator1-x,表是yourtable。相应地搜索和替换。如果您提前不知道标题名称,请对它们选择distinct,然后在

中执行C.column_name
DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

select @colsUnpivot 
  = stuff((select ','+quotename(C.column_name)
           from information_schema.columns as C
           where C.table_name = 'CSVTest_Match' and
                 C.column_name in ('Home Team','Away Team','Kick Off Time','Kick Off Date','Home Goals','Away Goals')
           for xml path('')), 1, 1, '')

set @query 
  = 'select id, entityId,
        indicatorname,
        indicatorvalue
     from CSVTest_Match
     unpivot
     (
        indicatorvalue
        for indicatorname in ('+ @colsunpivot +')
     ) u'

exec sp_executesql @query;

答案 1 :(得分:0)

“将数据列转换为SQL Server中的数据行?”。我开始在谷歌搜索你的问题,我得到了这么多答案。

访问以下链接:“Converting Columns into rows with their respective data in sql server”或“Convert row data to column in SQL Server”或  “SQL query to convert columns into rows” 或“How to convert Columns into Rows in Oracle?” 或

http://forums.asp.net/t/1851916.aspx?Converting+Column+values+to+Rows+in+SQL+Query

答案 2 :(得分:0)

SELECT * FROM 
(SELECT Header, Data FROM CSVTest_Match) AS T
PIVOT (Min(Data) FOR Header IN ([Home Team], [Away Team], [Kick Off Time], 
                [Kick Off Date], [Home Goals], [Away Goals])) AS T2