sql-server - 如何在sql中的pivot列中进行升序
问题描述
我需要在每个系统中每小时获取报告。我已经使用 pivot 获取了所有数据。但在我的专栏中,不是按升序排列的。
我的代码在这里:
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SELECT @cols = @cols + QUOTENAME(hour) + ',' FROM (select distinct DATEPART(hh, BillDate) AS hour from Bill_Entry WHERE BillDate >= '6/10/2018 12:00:00' AND BillDate < '7/10/2018 12:00:00' ) as tmp
select @cols = substring(@cols, 0, len(@cols)) --trim "," at end
set @query =
'SELECT * from
(
SELECT Remarks, DATEPART(hh, BillDate) AS hour, sum(cast(GrandTotal as int)) as Total
FROM Bill_Entry WHERE BillDate >= ''6/10/2018 12:00:00'' AND BillDate <= ''7/10/2018 12:00:00''
GROUP BY DATEPART(hh, BillDate),Remarks
) src
pivot
(
max(Total) for hour in (' + @cols + ')
) piv order by Len(Remarks), Remarks'
execute(@query)
我的输出是这样的:
这里我的专栏不是按升序排列的。我需要像这样的列
8 9 10 11 12 13 14 15 16 17 18 ......
解决方案
您应该进行以下更改
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SELECT @cols = @cols +
QUOTENAME(hour) +
','
FROM (
select distinct DATEPART(hh, BillDate) AS hour
from Bill_Entry
WHERE BillDate >= '6/10/2018 12:00:00'
AND BillDate < '7/10/2018 12:00:00'
) as tmp
ORDER BY DATEPART(hh, BillDate) ASC
-- the above order by line will solve your issue
select @cols = substring(@cols, 0, len(@cols)) --trim "," at end
set @query =
'SELECT * from
(
SELECT Remarks, DATEPART(hh, BillDate) AS hour, sum(cast(GrandTotal as int)) as Total
FROM Bill_Entry WHERE BillDate >= ''6/10/2018 12:00:00'' AND BillDate <= ''7/10/2018 12:00:00''
GROUP BY DATEPART(hh, BillDate),Remarks
) src
pivot
(
max(Total) for hour in (' + @cols + ')
) piv order by Len(Remarks), Remarks'
execute(@query)
推荐阅读
- metasploit - 错误:选择的拱门与有效载荷不兼容
- javascript - 使用 CSS 类中的数字作为 CSS 值
- html - 在输入文件的背景中添加文本
- entity-framework - 实体框架在将数据映射到 100k 时速度太慢
- mysql - MySQL:获取每个用户的状态(待定和已批准)计数
- python - 在 Python 中为基于文本的 RPG 提供 GUI
- cheat-engine - 如何找到带偏移量的指针 [ecx+eax*4](地址偏移量?)
- watchkit - 如何获取左手或右手佩戴 Apple Watch 的数据
- python - “_tkinter.TclError:图像“pyimage4”不存在”
- networkx - 从加权邻接矩阵计算节点介数