如果我有一个返回的报告,请说8列为:
Col1 Col1 Col3 Col4 Col5 Col6 Col7 Col8
有没有办法让它显示如下:
Col1 Col2 Col3 Col4
Col5 Col6 Col7 Col8
列的总数将是可变的,但我只想在每行上显示4。每列只应返回一个值。
答案 0 :(得分:1)
如果每个日期只显示一个字段,则可以更改SQL查询以将每个字段映射到所需的列和行。
计算完行数和列值后,您可以使用这些值将数据分组到正确的位置(在我的示例中为total_sales)。
DECLARE @data TABLE
(
sale_date DATE,
total_sales INT
)
INSERT INTO @data (sale_date, total_sales)
SELECT '2/1/2016', 100
UNION SELECT '2/2/2016', 450
UNION SELECT '2/3/2016', 175
UNION SELECT '2/4/2016', 900
UNION SELECT '2/5/2016', 150
UNION SELECT '2/6/2016', 425
UNION SELECT '2/7/2016', 300
UNION SELECT '2/8/2016', 550
DECLARE @date_from DATE = '2/1/2016'
, @date_to DATE = '2/10/2016'
SELECT d.total_sales AS 'total_sales'
, CONVERT(DATE, d.sale_date) AS 'sale_date'
, (DATEDIFF(DAY, @date_from, d.sale_date) - DATEDIFF(DAY,@date_from, d.sale_date) % 4) / 4 AS 'Row'
, DATEDIFF(DAY, @date_from, d.sale_date) % 4 AS 'column'
FROM @data d
WHERE d.sale_date >= @date_from
AND d.sale_date <= @date_to
有时创建新矩阵以显示此数据比尝试手动更改旧矩阵中的分组更容易。