栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL-枢转多个列而没有聚集

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL-枢转多个列而没有聚集

问题的一部分是您已跨多个要透视的列对数据进行了非规范化。理想情况下,您应该考虑修复表结构,以便于维护和查询。如果无法修复表结构,则应先取消对列的透视图,然后应用PIVOT获得最终结果。

UNPIVOT流程将采用多列并将其转换为多行。根据您的SQL Server版本,有几种方法可以执行此操作。可以使用UNPIVOT函数,或者由于使用的是SQL
Server 2008,因此可以将CROSS APPLY与VALUES子句一起使用来取消透视。

交叉申请/值代码为:

select t.producttitle, c.col, c.valuefrom tmpData tcross apply(  values (abvrMonthName, MonthAvg), (abvrMonthNameCount, MonthCount)) c (col, value)

请参阅带有演示的SQL
Fiddle
。这将占用您的多列,并将数据放入类似于以下格式的格式:

| PRODUCTTITLE |  COL | VALUE |-------------------------------|    Product 1 |  Dec |     0 ||    Product 1 | Dec# |     0 ||    Product 1 |  Nov |     0 ||    Product 1 | Nov# |     0 ||    Product 1 |  Oct |     0 ||    Product 1 | Oct# |     0 ||    Product 1 |  Sep |     0 ||    Product 1 | Sep# |     0 |

一旦数据采用这种格式,就可以将PIVOT应用于

col
包含月份名称的值:

select producttitle, jan, [jan#], feb, [feb#], mar, [mar#], apr, [apr#],  may, [may#], jun, [jun#], jul, [jul#], aug, [aug#],  sep, [sep#], oct, [oct#], nov, [nov#], dec, [dec#]from(  select t.producttitle, c.col, c.value  from tmpData t  cross apply  (    values (abvrMonthName, MonthAvg), (abvrMonthNameCount, MonthCount)  ) c (col, value)) dpivot(  sum(value)  for col in (jan, [jan#], feb, [feb#], mar, [mar#], apr, [apr#],   may, [may#], jun, [jun#], jul, [jul#], aug, [aug#],   sep, [sep#], oct, [oct#], nov, [nov#], dec, [dec#])) piv;

请参阅带有演示的SQL Fiddle。结果如下:

| PRODUCTTITLE | JAN | JAN# |  FEB | FEB# |  MAR | MAR# |  APR | APR# |  MAY | MAY# | JUN | JUN# | JUL | JUL# | AUG | AUG# | SEP | SEP# | OCT | OCT# | NOV | NOV# | DEC | DEC# |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|    Product 1 |   5 |    2 |    5 |    1 |    5 |    4 |    5 |    6 | 4.44 |    9 |   5 |    1 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 ||    Product 2 |   0 |    0 |    0 |    0 |    0 |    0 | 4.33 |    3 | 4.67 |    3 |   5 |    1 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 ||    Product 3 | 4.6 |    5 | 4.75 |    8 | 4.75 |    8 |    4 |    6 |    5 |    6 |   5 |    3 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |   0 |    0 |


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号