【问题标题】:Microsoft TSQL change text row to columnMicrosoft TSQL 将文本行更改为列
【发布时间】:2016-09-22 16:25:08
【问题描述】:

我想将 20 行 1 列更改为 1 行 20 列,以便稍后将其插入第二个数据库中

Name
----------
- Frank
- Dora
- ...
- Michael

Name1 | Name2 | ... | Name20
Frank | Dora  | ... | Michael

我试过了

SELECT * 
FROM  (SELECT TOP 20 firstname AS NAME 
       FROM   database) AS d 
      PIVOT (Min(NAME) 
            FOR NAME IN (name1, 
                         name2, 
                         name3, 
                         name4, 
                         name5, 
                         name6, 
                         name7, 
                         name8, 
                         name9, 
                         name10, 
                         name11, 
                         name12, 
                         name13, 
                         name14, 
                         name15, 
                         name16, 
                         name18, 
                         name19, 
                         name20) ) AS f 

但是所有的名字都是NULLDEMO

【问题讨论】:

标签: tsql


【解决方案1】:

您很接近...但是您的内部选择必须带有新的列名。试试这样:

DECLARE @tbl TABLE(Name VARCHAR(100));
INSERT INTO @tbl VALUES('Frank'),('Dora'),('Michael');

SELECT p.*
FROM
(
    SELECT 'Name' + CAST(ROW_NUMBER() OVER(ORDER BY Name) AS VARCHAR(150)) AS ColumnName
          ,Name
    From @tbl
) AS tbl
PIVOT
(
    MIN(Name) FOR ColumnName IN(Name1,Name2,Name3)
) AS p

【讨论】:

  • 感谢您的快速回答,但我不明白。这些名称是子查询的结果,在转换为 1 行 20 列后,它们应该插入第二个数据库...
  • @mydefs 你自己的代码不过是一个选择...内部选择将创建一个名称列表和一个正在运行的“Name1”、“Name2”、“Name3”...如列表中所示(您可以使用TOP 20 将其剪切)。在此之后,PIVOT 将根据它们的第二个值(即新列的名称)将名称排序到新的 中。只需将@tbl 替换为您的真实表名...如果您将INSERT INTO SomeTable 添加为第一行,则可以将其添加到具有合适定义的表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多