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

T-SQL动态枢轴

谷博艺
2023-03-14
问题内容

好吧,我有一张看起来像这样的表

ItemID | ColumnName | Value
1      | name       | Peter
1      | phone      | 12345678
1      | email      | peter@host.com
2      | name       | John
2      | phone      | 87654321
2      | email      | john@host.com
3      | name       | Sarah
3      | phone      | 55667788
3      | email      | sarah@host.com

现在,我需要将其转换为:

ItemID | name  | phone    | email
1      | Peter | 12345678 | peter@host.com
2      | John  | 87654321 | john@host.com
3      | Sarah | 55667788 | sarah@host.com

我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。

有人可以帮忙吗?


问题答案:

看下面的例子

CREATE TABLE #Table (
        ID INT,
        ColumnName VARCHAR(250),
        Value VARCHAR(250)
)

INSERT INTO #Table SELECT 1,'name','Peter' 
INSERT INTO #Table SELECT 1,'phone','12345678' 
INSERT INTO #Table SELECT 1,'email','peter@host.com' 
INSERT INTO #Table SELECT 2,'name','John' 
INSERT INTO #Table SELECT 2,'phone','87654321' 
INSERT INTO #Table SELECT 2,'email','john@host.com' 
INSERT INTO #Table SELECT 3,'name','Sarah' 
INSERT INTO #Table SELECT 3,'phone','55667788' 
INSERT INTO #Table SELECT 3,'email','sarah@host.com'

---I assumed your tablename as TESTTABLE--- 
DECLARE @cols NVARCHAR(2000) 
DECLARE @query NVARCHAR(4000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT 
                                '],[' + t.ColumnName 
                        FROM    #Table AS t 
                        --ORDER BY '],[' + t.ID 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']'

SELECT  @cols

SET @query = N'SELECT ID,'+ @cols +' FROM 
(SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p 
PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) 
AS pvt;'

EXECUTE(@query)

DROP TABLE #Table


 类似资料:
  • 问题内容: 我有一张这样的产品零件表: 部分 我想要一个查询,将返回这样的表: 在其实际实施中,将有数百万个产品零件 问题答案: 不幸的是,MySQL没有函数,但是您可以使用聚合函数和语句对其进行建模。对于动态版本,您将需要使用准备好的语句: 请参见带有演示的SQL Fiddle 如果只有几列,则可以使用静态版本:

  • 我在使用PIVOT SQL脚本时遇到了一个“小”问题。我目前的解决方案基于类似的问题 动态枢轴 . 我已经写好了PIVOT脚本,基本上没问题。然而,我的情况是这样的,脚本输出类似这样的内容,而不是将唯一的条目放在单行上 而我所寻找的结果应该是这样的 这是脚本 我将不胜感激一些可以帮助我解决这个问题的指示。我在这里做了一个小提琴,由于某种奇怪的原因,它没有输出任何东西,但生成架构的所有代码都在那里

  • 好的,我有一张像这样的桌子 现在我需要把它变成这样: 我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。 有人能帮忙吗?

  • 问题内容: 我正在使用Microsoft SQL Server Management Studio 2008。 我有看起来像这样的数据: 我希望结果显示如下: 这些列是未知的,所以我知道我需要一个动态查询。我已经尝试过使用数据透视功能进行动态查询,但只在相同类型的值下进行分组。所以聚合函数对我不利。 这是我尝试过的查询: 执行(@DynamicPivotQuery) 接下来,我添加了row_num

  • 在libGDX Box2D中,我有一个DynamicBody“身体”和静态身体“锚”,它的关节从“枢轴关节点”开始,身体可以围绕“枢轴点”转动,工作完美(位置2)。 但我想把“身体”旋转到特定的角度,当模拟运行,重力=10等时,身体转向底部。当我点击一个按钮时,我想将身体转到“myNewAngle”位置,如图所示(位置1) 我的问题是,我的身体正在转动它的原点(位置3),我想把它转到枢轴点,我设置

  • 根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是: 我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?