【问题标题】:How do I create a new table in SQL using the row values of another table as column names (dynamic)?如何使用另一个表的行值作为列名(动态)在 SQL 中创建一个新表?
【发布时间】:2014-06-25 18:59:43
【问题描述】:

如何使用另一个表的行值作为列名在 SQL 中创建一个新表?请注意,原始表值是动态的。动态 Pivot 是唯一的选择吗?

例如,如果我的旧表如下所示:

players
-----------
Lebron James
Kobe Bryant
Dwayne Wade
Chris Bosh
James Harden

我希望新表看起来像:

Lebron James | Kobe Bryant | Dwayne Wade | Chris Bosh | James Harden

【问题讨论】:

  • 表格中的字段会相同吗?如果是这样,您为什么要创建新表?
  • 执行之前的查询后基本上是一样的。但列中值的数量可能会改变。所以我想创建一个新表不是坩埚部分。但我不知道原始表的列中会有什么值。
  • 在这种情况下,您最好使用一个表格和一个字段来区分记录所指的玩家。

标签: sql sql-server database sql-server-2008


【解决方案1】:

试试这个例子:

DROP TABLE #players 
CREATE TABLE #players (name VARCHAR(200))
INSERT INTO #players 
SELECT 'Lebron James'
UNION SELECT 'Kobe Bryant'
UNION SELECT 'Dwayne Wade'
UNION SELECT 'Chris Bosh'
UNION SELECT 'James Harden'


DECLARE @cmd VARCHAR(8000)
SET @cmd ='CREATE TABLE MyNewTable (id INT'
SELECT @cmd = @cmd + '
, ['+name+'] VARCHAR(255)'
FROM #players

SELECT @cmd = @cmd + ')'

PRINT @cmd
EXEC(@cmd)

EXEC('SELECT * FROM MyNewTable')

【讨论】:

  • 感谢您的回复,但原始列将是动态的。这是静态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多