按日期和项目分组并计算要导出到图表的行数

时间:2014-10-29 23:23:27

标签: sql-server tsql sql-server-2012 pivot group-by

我需要一些帮助来解决一个远远超出我糟糕技能的问题。

我有一个表格,我在每个产品数据表上注册访问权限,因此对于每次访问,我都有ItemCode (SKU)TimeStamp的记录以及其他一些信息:

|SKU|TimeStamp |Country|Referral|
|AT1|1410290655|Spain  |http... |
|AT2|1410290428|Spain  |http... |
|AT2|1410290215|Spain  |http... |
......
|AT1|1410282324|Spain  |http... |
|AT3|1410282255|Spain  |http... |
|AT5|1410282128|Spain  |http... |
|AT2|1410282015|Spain  |http... |

我需要绘制包含所有这些信息的折线图,我需要每天显示 本月的每个项目(AT1AT2AT3 .....)的展示次数 但由于我将选择TimeFrame,因此项目列表(AT1AT2AT3AT4 ...)不是固定的,但必须由查询..

由于我将使用Google Charts,我需要一个这样的数组:

['Date', 'AT1', 'AT2', 'AT3', 'AT4', 'AT5',....]
['141029', 125,  312,   512,   371,   125,.....]
['141028', 143,  213,   252,   621,   246,.....]
['141027', 215,  412,   312,   571,   425,.....]

任何人都可以给我一些提示来达到这样的目标吗?

1 个答案:

答案 0 :(得分:0)

动态支点就是您想要的。此代码不会为您提供您正在寻找的确切输出,但它应该作为一个提示和一些工作。您可以很容易地将数据导出为带有标题的CSV文件,以便与Google Charts一起使用。

DECLARE @sql AS NVARCHAR(MAX), @cols AS NVARCHAR(MAX)

SELECT @cols= ISNULL(@cols + ',','') + QUOTENAME(sku) 
FROM (SELECT DISTINCT sku FROM wLogs) AS Columns

SET @sql =
  N'SELECT CAST(date AS char(6)) date, ' + @cols + ' 
    FROM (SELECT sku, LEFT([TimeStamp],6) date FROM wLogs) a
    PIVOT (COUNT([sku])
          FOR sku IN (' + @cols + ')) AS p
        ORDER BY date DESC'

EXEC sp_executesql @sql

输出:

date   AT1         AT2         AT3         AT5
------ ----------- ----------- ----------- -----------
141028 1           1           1           1
141029 1           2           0           0