当前位置: 首页 > 面试题库 >

如何使用来自列的不同值作为新表的列名来创建表?

红甫
2023-03-14
问题内容

我有一个带有Tag列的表,其中包含大约1000个不同的标签。我想为每个不同的标签创建一个带有列的新表,该列名称将是标签值。使用T-
SQL是否有一种简便的方法来做到这一点?SQL Server 2005及更高版本中的任何内容都可以。

这是我的意思的示例:

Table:
Tag    Value    Timestamp
tag1   123      ---
tag1   456      ---
tag2   854      ---
tag3   923      ---
 .
 .
 .
tag90  324      ---

New Table:
tag1    tag2    tag3 ... tag90
123     854     923      324
456 ...

更新:

我知道限制(在表中的列数上),但是列不会稀疏,并且任何列中都不会有null或0值。

我想要此表的原因是我想针对此新表的列运行SSAS群集算法。


问题答案:

使用PIVOT表运算符,然后使用INTO子句从数据透视表的列中创建新表。像这样的东西:

SELECT *
INTO newtablename
FROM ( SELECT tag, value FROM tags) AS t
PIVOT 
(
  MIN(value)
  FOR tag in ([tag1], [tag2], [tag3], [tag4])
) AS p;

在此处查看其运行情况:

  • SQL小提琴演示

但是, 在这种情况下,您必须使用动态sql对表中的任意数量的标签动态地执行此操作,而不是手动列出它们。像这样:

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);


select @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(tag)
                      FROM tags
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');

SELECT @query = 'SELECT *
                 INTO newtablename
                 FROM ( SELECT tag, value FROM tags) AS t
                 PIVOT 
                 (
                   MIN(value)
                   FOR tag in ( ' + @cols + ' )
                 ) AS p';

execute(@query);

在此处查看其运行情况:

  • SQL小提琴演示

这将创建一个名称newtablename如下的全新表:

| TAG1 | TAG2 | TAG3 | TAG4 |
-----------------------------
|  123 |  854 |  923 |   44 |


 类似资料:
  • 问题内容: 我正在尝试创建一个新表,该表将包含三个现有表中的选定数据。 现有的三个表设置如下,我想要的结果在底部: 在此先感谢您的帮助! 问题答案: 您需要进行三向联接: 演示 或者,如果您已经创建了表,则可以执行以下操作: 要获得多个属性,您必须分别为每个属性将详细信息和分类表联接在一起:

  • 我正在编写一个扑克游戏,并将所有的牌存储在类Deck中创建的数组列表中: ... 我想使用另一个类--Hand--从arraylist中绘制前五个元素,并将它们放入名为myHand的新arraylist中: 。。。到目前为止一切顺利。当我显示主类的手数组列表时,我得到了一副牌中的前五张牌。然而,当我从deck类显示这副牌时(在调用Draw()方法之后),所有52张牌仍然在那里。 如果我在Hands

  • 正如你可以在这个问题中检查的,在熊猫0.16中添加一列的最佳方法是 其中new_column是新列的文字名称(即使它不是以字符串形式写入)。 这对我来说是个问题,因为我想添加许多列,这些列的名称由变量指定 我试过这个: 它不起作用:这样,只添加了一列(名为“new\u col\u name”) 预期结果是,给定一个具有列[“a”、“B”、“C”]的表,该表将具有列[“a”、“B”、“C”、“a_n

  • 问题内容: 有什么办法可以找到3个不同列的最大值?我正在尝试查找3列值高于指定值的记录,并尝试避免在查询中进行如下操作: 表结构是这样的: 并选择像这样: 问题答案: 您需要使用GREATEST 像那样

  • 问题内容: 我有2张桌子: 表-列,, 表列, 我必须更新的列与表的的与顶部1,其中表匹配。该表具有不同资产的相同名称。 表格示例: 我怎样才能做到这一点?我尝试使用其他查询,但无法获取。 问题答案:

  • 问题内容: 我们创建为: 我们如何用Java 创建一个? 问题答案: 或使用泛型(Java 7或更高版本) 或带有泛型(旧的Java版本)