我已经阅读了数十种将要解决的类似移调问题的解决方案,但奇怪的是,没有任何一种解决方案可以完全反映我的问题。我只是试图将我的行翻转为简单的仪表板类型数据集中的列。
从各种事务表中提取的数据如下所示:
DatePeriod PeriodNumberOverall Transactions Customers Visits
'Jan 2012' 1 100 50 150
'Feb 2012' 2 200 100 300
'Mar 2012' 3 300 200 600
并且我希望能够生成以下内容:
Jan 2012 Feb 2012 Mar 2012
Transactions 100 200 300
Customers 50 100 200
Visits 150 300 600
指标将是静态的(交易,客户和访问),但日期段将是动态的(即,IE-随着月份的增加而增加)。
再次,我准备了许多利用数据透视,取消透视,存储过程,UNION
ALL等的示例,但是在我不进行任何汇总的情况下,什么也没做,只是从字面上移置了整个输出。我还发现在Visual Studio2005中使用带有嵌入式列表的矩阵可以轻松实现此目的,但是我无法将最终输出导出到excel,这是必需的。任何帮助将不胜感激。
为了获得所需的结果,您需要首先提供UNPIVOT
数据,然后是PIVOT the
DatePeriod`值。
该UNPIVOT将变换的多列Transactions
,Customers
并Visits
为多行。其他答案使用aUNION ALL
取消,但是SQL Server 2005UNPIVOT
是支持该功能的第一年。
要取消数据透视表的查询是:
select dateperiod,
col, value
from transactions
unpivot
(
value for col in (Transactions, Customers, Visits)
) u
参见演示。这会将您当前的列转换为多行,因此数据如下所示:
| DATEPERIOD | COL | VALUE |
-------------------------------------
| Jan 2012 | Transactions | 100 |
| Jan 2012 | Customers | 50 |
| Jan 2012 | Visits | 150 |
| Feb 2012 | Transactions | 200 |
现在,由于数据在行中,因此您可以将PIVOT
函数应用于DatePeriod
列:
select col, [Jan 2012], [Feb 2012], [Mar 2012]
from
(
select dateperiod,
t.col, value, c.SortOrder
from
(
select dateperiod,
col, value
from transactions
unpivot
(
value for col in (Transactions, Customers, Visits)
) u
) t
inner join
(
select 'Transactions' col, 1 SortOrder
union all
select 'Customers' col, 2 SortOrder
union all
select 'Visits' col, 3 SortOrder
) c
on t.col = c.col
) d
pivot
(
sum(value)
for dateperiod in ([Jan 2012], [Feb 2012], [Mar 2012])
) piv
order by SortOrder;
请参阅带有演示的SQL Fiddle。
如果您有未知的日期期限,那么您将使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(dateperiod)
from transactions
group by dateperiod, PeriodNumberOverall
order by PeriodNumberOverall
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT col, ' + @cols + '
from
(
select dateperiod,
t.col, value, c.SortOrder
from
(
select dateperiod,
col, value
from transactions
unpivot
(
value for col in (Transactions, Customers, Visits)
) u
) t
inner join
(
select ''Transactions'' col, 1 SortOrder
union all
select ''Customers'' col, 2 SortOrder
union all
select ''Visits'' col, 3 SortOrder
) c
on t.col = c.col
) x
pivot
(
sum(value)
for dateperiod in (' + @cols + ')
) p
order by SortOrder'
execute(@query)
请参阅带有演示的SQL Fiddle。两者都会给出结果:
| COL | JAN 2012 | FEB 2012 | MAR 2012 |
-------------------------------------------------
| Transactions | 100 | 200 | 300 |
| Customers | 50 | 100 | 200 |
| Visits | 150 | 300 | 600 |
问题内容: 我正在尝试建立我的第一个响应式布局。我想以垂直线显示列表项,具体取决于宽度。 如果浏览器调整大小,我希望它成为 有人能帮我吗?我已经尝试了几个小时,却什么也没得到。我试过使用表,但我也不能那样做。 问题答案: 使用 CSS3 列可以很容易地做到这一点。这是一个示例,HTML:
问题内容: 我必须在一行中显示单个人的多个收入,收入类型和雇主名称值。因此,如果“ A”有来自三个不同来源的三个不同的收入, 我需要向他们展示 我既需要“固定列数”(我们知道雇主,收入类型和金额列将要重复多少次)逻辑又需要“动态显示列”(未知这些列要重复的次数) 谢谢。 问题答案: 由于使用的是SQL Server,因此有几种方法可以将数据行转置为列。 聚合函数/ CASE: 您可以将聚合函数与C
我试图编写正确的查询,但它们显示的结果不正确。例如,我有表ABC: 在c栏中只能b_id 因为111在a_id10或11不是12我怎样才能找到它?我需要找到列C中发生(无效)值b_id的所有行,它们不在同一个a_id中。Sql(postgresql)不能正常工作,为什么?感谢任何帮助。 我的sql:
我在Wordpress中有一个文章网格,下面是按类别排序的默认方法: 有办法把这个变成下拉列表吗?我为类似的情况找到了不同的解决方案,但它们都有作为无序列表的好处(ul li)。我的只是一堆链接。
问题内容: 我有一个要在垂直约束的空间中放置的物品的清单: 由于我不希望列表的高度超过特定的高度,但是我可以自由地将其水平扩展,因此我想将列表分为几列,如下所示: 或者,或者(在我看来,顺序并不重要) css属性允许将列表分成几列,但只接受固定数量的列。我不知道我要拥有的项目数(可以从1增加到40以上),因此,如果我将列数设置为3,则任何包含6个以上项目的列表都将过高,并且如果只有4个项目,则只有
问题内容: 我有以下代码实例化JTable:该表具有正确数量的行和列,但是在列顶部没有标题的迹象。 与其他制表代码相比,我看不到任何遗漏的步骤,但是必须缺少某些内容。 问题答案: 把你的JTable里面。试试这个: