SQL语句如何使用日期作为列

第一回写原创文章大家多多包含啊!今天一个朋友找我写个东西,就是在SQL2000数据库下使用一个表中的日期数据作为列呈现一个打印报表。需求如下:

  2012-05-01 2012-05-02 2012-05-03 2012-05-04
分公司1 1000 1000 1000 1000
分公司2 1000 1000 1000 1000

 

简单说就是按天求和当天的班组日产值。不要问我日产值是什么。我也不知道。我原来的做法是在应用层多次查询数据库并将获得的结果集整合出一张报表。但是那位老哥不知道用了C++的什么组件DAO返回的结果集不能通过程序修改,只能直接在页面呈现。这可要了我的老命。经详细研究写出了如下语句。最终可实现需求。那个数据神马的我就不提供插入语句了大家心领神会就好。

 

其实简单的思路就是把一条条的SQL片段拼装成一条SQL语句。哦对了,如果使用如下方式的话建议发在存储过程中,我比较懒就没写。大家多多包含。最后需要说的是建立表的时候用中文真心不好,还是用英文吧。或许有的人会问,为什么例子是中文的呢?回答是表结构是他给的我怕换了他看不懂……残念啊!具体每条语句的意义详见注释。如果是其他数据库也可以仿照这个例子写。因为原理是不变的。唯一有问题的是如果时间太多会造成SQL片段过长的问题。需要注意!OK其他的看代码吧,不解释了!

  

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rcllr]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[rcllr]
GO

CREATE TABLE [dbo].[rcllr] (  [订单编号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,  [分公司] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  [投产班组] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  [班组人数] [int] NULL ,  [出工人数] [int] NULL ,  [班组日产量] [int] NULL ,  [产量日期] [datetime] NULL ,  [班组日产值] [numeric](18, 2) NULL ,  [班组完成任务数] [int] NULL ,  [班组剩余任务数] [int] NULL ) ON [PRIMARY] GO

 

declare @starttime datetime,@endtime datetime,@sql varchar(2000)

set @starttime = '2012-05-01';--起始时间
set @endtime = '2012-05-06';--结束时间
set @sql = 'select 分公司';--需要查询什么字段在这里拼装

while @starttime < @endtime
begin
  print @starttime
  set @starttime = @starttime+1
  --'''表示输出一个单引号
  --'''+Convert(Varchar(10),@starttime,120)+'''表示 将变量@starttime转换为字符串 '2012-05-05'
  set @sql = @sql +',(select sum(班组日产值) from rcllr M where M.分公司=N.分公司 and M.产量日期='''+Convert(Varchar(10),@starttime,120)+''') as '''+Convert(Varchar(10),@starttime,120)+''''
end

set @sql = @sql+' from rcllr N group by 分公司'--其他查询条件在这里拼装
exec(@sql) --执行SQL

print @sql --打印SQL


你可能感兴趣的:(sql,null,数据库,报表,table,任务)