我有一个带有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对表中的任意数量的标签动态地执行此操作,而不是手动列出它们。像这样:
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);
在此处查看其运行情况:
这将创建一个名称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版本)