完成按照日期排列

本文介绍了一个SQL存储过程,用于按天或按月统计条形码打印数量。该过程使用了临时表和CTE(公用表表达式)来实现灵活的数据统计,并提供了两个示例参数设置,帮助用户理解如何调用此过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- exec sp_text 'dbo.proc_LabelChartByDate'
if exists (select * from sysobjects where id=object_id('dbo.proc_LabelChartByDate'))
 drop procedure dbo.proc_LabelChartByDate
go
set ansi_nulls off
go
CREATE procedure [dbo].[proc_LabelChartByDate]
/***
  Name : 根据天或者月统计条码数量
  Param: @Type类型(1月,2天);@InsertSql(SQL语句);@start(开始统计时间);@end(结束统计时间)
  Remark:
  Example:注意1master..spt_values这个函数记录所有的次序数据;2@Type类型(1月,2天) 由于类型不同故number的计算方法不一样
  exec proc_LabelChartByDate 2,'','2014-10-01','2014-12-31'
  author : WQF 2014.4.18
***/
@Type int,
@InsertSql nvarchar(3000),
@start datetime,
@end datetime
as
  set xact_abort on
begin
--构造临时表#LabelData
create table #LabelData
(
ID int identity(1,1),
Label_ID uniqueidentifier,
PrintDate datetime
)
--构造临时表#ResultData
create table #ResultData(
DateStr nvarchar(20),
LabelNum int
)


--exec(@InsertSql)
insert into #LabelData(Label_ID,PrintDate)
select Print_UID,Print_Date from Label_Print
where Print_Date between @start and @end 


--Type=1表示按照月份进行统计
if(@Type=1)
begin
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN 0 AND (DATEPART(MONTH,@end)-DATEPART(MONTH,@start)))

insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BMonth,23)+'月',LabelNum=isnull(a.AC,0)
from 
(select year(Print_Date) as AY,month(Print_Date) AS AM,COUNT(*) AS AC from Label_Print 
group by year(Print_Date),month(Print_Date)) AS a right join 
(select BMonth=DATEADD(MONTH,TT.number,@start) from TT) AS b ON  A.AM=MONTH(BMonth) AND A.AY=YEAR(BMonth)
--查看临时表#ResultData
select * from #ResultData
end


--Type=2表示按照天数进行统计  
else if(@Type=2)
begin
DECLARE @sint int
DECLARE @eint int
set @sint=DATEPART(day,@start)
set @eint=DATEPART(day,@start)+DATEdiff(DAY,@start,@end)
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN @sint-1 AND @eint-1)


insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BDate,23)+'日',LabelNum=isnull(a.AC,0)
from 
(select year(Print_Date) as AY,month(Print_Date) AS AM,day(Print_Date) AS AD,COUNT(*) AS AC from Label_Print 
group by year(Print_Date),month(Print_Date),day(Print_Date)) AS a
right join 
(select BDate=DATEADD(DAY,TT.number,@start) from TT) AS b ON A.AD=DAY(BDate) AND A.AM=MONTH(BDate) AND A.AY=YEAR(BDate)
--查看临时表#ResultData
select * from #ResultData
end


--释放临时表
drop table #ResultData
drop table #LabelData
end


go
set ansi_nulls off
go



### 使用 Bootstrap Table 和 Sortable 插件实现按日期降序排列 为了实现在 Bootstrap 项目中按照日期字段进行倒序排序,可以利用 `bootstrap-table` 组件及其内置的排序功能。通过配置特定选项并设置初始排序状态来达成目标。 #### 初始化表格时指定默认排序方式 当定义表格结构时,在 JavaScript 配置对象内加入 `sortName` 和 ` sortOrder` 属性以指定期望的列名以及升序还是降序: ```javascript $('#table').bootstrapTable({ url: 'your_data_source', // 数据源地址 sortName: "date_column", // 要排序的列名称 sortOrder: "desc", // 设置为 desc 表示降序 }); ``` 上述代码片段展示了如何设定默认情况下依据名为 `"date_column"` 的列来进行降序展示[^1]。 #### 动态调整排序逻辑 如果需要动态改变当前显示的数据顺序,则可以通过调用 API 方法重新加载数据的同时传递新的排序参数给服务器端处理: ```javascript function reloadWithNewSort(column, order){ $('#table').bootstrapTable('refreshOptions',{ sortName : column, sortOrder : order }); } // 示例:点击按钮触发按日期降序重载 $("#btn-sort-date-desc").click(function(){ reloadWithNewSort("date_column","desc"); }); ``` 此部分说明了怎样创建自定义函数用于切换不同的排序条件,并提供了具体操作实例——即响应某个按钮事件从而执行按日期降序的操作[^2]。 #### 处理特殊格式化后的日期字符串比较问题 有时前端接收到的是经过某种格式转换过的日期串(比如:"YYYY-MM-DD HH:mm:ss"),此时可能无法直接正确识别其先后关系。为此可以在初始化时注册一个自定义解析器,确保能够准确无误地完成时间戳之间的对比工作: ```javascript $.extend($.fn.bootstrapTable.defaults, { formatSorter: function (name) { switch(name){ case 'date_column': return function(value,row,index){ var date = new Date(value); return isNaN(date)?'':date.getTime(); }; default : break; } } }) ``` 这里扩展了全局默认行为,针对特定列提供了一种将原始值映射成可用于数值大小判断的形式的方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值