【问题标题】:Need help creating a pivoted view from table with dynamic properties需要帮助从具有动态属性的表创建透视视图
【发布时间】:2019-01-26 10:29:14
【问题描述】:

我有一个大约 80k 行的表格,格式如下:

+--------+-----------+-------------------+---------------------+----------------------+-----------------+----------------+-----------------+
| SiteID | SubSiteID | DynamicPropertyID | DynamicPropertyName | DynamicPropertyValue | StaticProperty1 | StaticPropety2 | StaticProperty3 |
+--------+-----------+-------------------+---------------------+----------------------+-----------------+----------------+-----------------+
|      1 |         1 |                 1 | Property1           | ABC                  |               1 |              1 |               1 |
|      1 |         1 |                 2 | Property2           | XYZ                  |               1 |              1 |               1 |
|      1 |         1 |                 3 | Property3           | DEF                  |               1 |              1 |               1 |
|      1 |         2 |                 1 | Property1           | GHT                  |               1 |              1 |               1 |
|      1 |         2 |                 2 | Property2           | XYZ                  |               1 |              1 |               1 |
|      1 |         2 |                 3 | Property3           | WWF                  |               1 |              1 |               1 |
|      2 |         1 |                 1 | Property1           | FHS                  |               1 |              1 |               1 |
|      2 |         1 |                 2 | Property2           | HHS                  |               1 |              1 |               1 |
|      2 |         1 |                 3 | Property3           | BSF                  |               1 |              1 |               1 |
|      2 |         2 |                 1 | Property1           | QDD                  |               1 |              1 |               1 |
|      2 |         2 |                 2 | Property2           | FFF                  |               1 |              1 |               1 |
|      2 |         2 |                 3 | Property3           | YTR                  |               1 |              1 |               1 |
+--------+-----------+-------------------+---------------------+----------------------+-----------------+----------------+-----------------+

我需要做的是为这个表格创建一个视图,将表格转换为以下格式:

+--------+-----------+-----------+-----------+-----------+-----------------+-----------------+-----------------+
| SiteID | SubSiteID | Property1 | Property2 | Property3 | StaticProperty1 | StaticProperty2 | StaticProperty3 |
+--------+-----------+-----------+-----------+-----------+-----------------+-----------------+-----------------+

我面临的问题是,随着时间的推移,我们可能会向表中添加新的“动态属性”,因此如果我们将 Property4 添加到每个 SiteID,视图需要能够动态更改以添加新列/SubsiteID 组合,例如。

非常感谢任何建议或帮助。

【问题讨论】:

  • 任何可以使用存储过程而不是视图的方式。不幸的是,要创建真正的动态数据透视表,您需要使用动态 sql。如果这是一个选项,那么您可以在这里查看示例stackoverflow.com/questions/10404348/…

标签: tsql sql-server-2012 ssms


【解决方案1】:

试试下面的查询:

DECLARE @samplex TABLE
(
SiteID INT,
SubSiteID  INT,
DynamicPropertyID  INT,
DynamicPropertyName  VARCHAR(10),
DynamicPropertyValue VARCHAR(10)

);
INSERT @samplex
(
    SiteID,
    SubSiteID,
    DynamicPropertyID,
    DynamicPropertyName,
    DynamicPropertyValue

)
VALUES
(1, 1, 1, 'Property1', 'ABC'),
(1, 1, 1, 'Property2', 'ABC'),
(1, 1, 1, 'Property3', 'ABC'),
(1, 1, 1, 'Property4', 'ABC'),
(2, 1, 2, 'Property5', 'ABC'),
(2, 1, 2, 'Property6', 'ABC'),
(2, 1, 2, 'Property1', 'ABC'),
(2, 1, 2, 'Property2', 'ABC'),
(3, 1, 2, 'Property3', 'ABC'),
(3, 1, 2, 'Property4', 'ABC'),
(3, 1, 3, 'Property5', 'ABC'),
(4, 1, 4, 'Property6', 'ABC');

SELECT *
FROM @samplex
    PIVOT
    (
        MAX(DynamicPropertyValue)
        FOR [DynamicPropertyName] IN ([Property1], [Property2], [Property3], [Property4], [Property5], [Property6])
    ) pvt;

【讨论】:

  • 嗨@Puneeth 感谢您的回复。不幸的是,CREATE VIEW 语句中不允许使用局部变量和临时表。
  • @Cam 是的..!但是尝试执行我的查询并在视图中实现相同的逻辑..它会工作..我在 3 天前根据我的客户要求尝试了与您相同的逻辑..我使用 Pivot Query 创建了视图..它有效
  • @Cam 我认为您需要两个视图第一个视图将根据您在问题中放置的表格产生,在第二个视图中您可以参考我建议的答案来实现枢轴.. 和结果将按照您在问题中提出的第二张表显示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2019-04-19
  • 2014-01-21
相关资源
最近更新 更多