0

我需要将我的数据转换为适用于剑道网格的格式(示例)。此示例实际上是尝试为默认情况下不可用的单个图表条着色的 hack。如果您正确格式化数据,您可以将条形堆叠成组,并且可以为每个组着色。

我的数据需要像这样构造,第一列名称作为列标题

names               CompletedAllCourses   HasExpiredCourses   HasNotTakenCourses  HasDueCourses
-------------------------------------------------------------------------------------------
CompletedAllCourses   12                  NULL                NULL                 NULL
HasDueCourses         NULL                NULL                NULL                 4
HasExpiredCourses     NULL                8                   NULL                 NULL
HasNotTakenCourses    NULL                NULL                24                   NULL

这就是我必须从 GroupedStats Table 开始的

CompletedAllCourses     12
HasDueCourses           4
HasExpiredCourses       8
HasNotTakenCourses      24

我从网上找到的示例中尝试了以下查询。

SELECT * FROM  GroupedStats
PIVOT 
(
  MAX(cnt) FOR cat IN (CompletedAllCourses, 
          HasExpiredCourses, HasNotTakenCourses, HasDueCourses)
) p

这就是结果。

CompletedAllCourses HasExpiredCourses HasNotTakenCourses HasDueCourses
------------------- ----------------- ------------------ -------------
12                  8                 24                 4

我想出了一种方法并将其发布为答案。

4

2 回答 2

0

PIVOT 示例以节省时间

我将这篇文章的这一部分移到了答案中,因为它最终对我有用。

需要另一列来解决问题,否则事情会崩溃成一个结果。

select * from 
(select cat as names, cnt, cat FROM GroupedStats) x
PIVOT 
(
MAX(cnt) FOR cat IN (CompletedAllCourses, HasExpiredCourses, 
        HasNotTakenCourses, HasDueCourses)
) p

[sql 小提琴] ( http://sqlfiddle.com/#!6/8b706/3 )

我得到了我想要解决问题的格式!如果您可以添加解释,请发表评论。

names                 CompletedAllCourses HasExpiredCourses HasNotTakenCourses HasDueCourses
---------------------------------------------------------------------------------------
CompletedAllCourses    12                 NULL              NULL                 NULL
HasDueCourses          NULL               NULL              NULL                 4
HasExpiredCourses      NULL               8                 NULL                 NULL
HasNotTakenCourses     NULL               NULL              24                   NULL
于 2013-12-31T06:07:04.830 回答
0

这将为您提供所需的结果,但它需要硬编码文字CASE

  SELECT cat,
  CASE cat WHEN 'CompletedAllCourses' THEN CompletedAllCourses ELSE NULL END AS CompletedAllCourses,
  CASE cat WHEN 'HasExpiredCourses' THEN HasExpiredCourses ELSE NULL END AS HasExpiredCourses,
  CASE cat WHEN 'HasNotTakenCourses' THEN HasNotTakenCourses ELSE NULL END AS HasNotTakenCourses,
  CASE cat WHEN 'HasDueCourses' THEN HasDueCourses ELSE NULL END AS HasDueCourses
  FROM GroupedStats
  JOIN
  (
    SELECT * FROM  GroupedStats
    PIVOT 
    (
      MAX(cnt) FOR cat IN (CompletedAllCourses, 
            HasExpiredCourses, HasNotTakenCourses, HasDueCourses)
    ) p
  ) X
  ON 1 = 1

SQL 小提琴演示

于 2013-12-31T03:36:21.470 回答