为了账号安全,请及时绑定邮箱和手机立即绑定

SQL Server中的动态数据透视列

SQL Server中的动态数据透视列

白衣非少年 2019-11-02 14:14:50
我在SQL Server中有一个名为Property的表,其中包含以下列:Id    Name该表中有一些属性,其他表中的某些对象应该为其赋值。Id    Object_Id    Property_Id    Value我想制作一个如下所示的数据透视表,其中对我在第一张表中声明的每个属性都有一列:Object_Id    Property1    Property2    Property3    ...我想知道如何从表中动态获取数据透视表的列。因为第一张表中的行将更改。
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

像这样:


DECLARE @cols AS NVARCHAR(MAX);

DECLARE @query AS NVARCHAR(MAX);


select @cols = STUFF((SELECT distinct ',' +

                        QUOTENAME(Name)

                      FROM property

                      FOR XML PATH(''), TYPE

                     ).value('.', 'NVARCHAR(MAX)') 

                        , 1, 1, '');


SELECT @query =


'SELECT *

FROM

(

  SELECT

    o.object_id,

    p.Name,

    o.value

  FROM propertyObjects AS o

  INNER JOIN property AS p ON o.Property_Id = p.Id

) AS t

PIVOT 

(

  MAX(value) 

  FOR Name IN( ' + @cols + ' )' +

' ) AS p ; ';


 execute(@query);

SQL提琴演示。

这会给你这样的东西:


| OBJECT_ID | PROPERTY1 | PROPERTY2 | PROPERTY3 | PROPERTY4 |

-------------------------------------------------------------

|         1 |        ee |        fd |       fdf |      ewre |

|         2 |       dsd |       sss |      dfew |       dff |


查看完整回答
反对 回复 2019-11-02
  • 1 回答
  • 0 关注
  • 498 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信