如何生成这样的sql语句

pdsly 2005-09-13 03:27:20
有这样的一段代码:
select 数量=count(*), 年份=2005 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2005-1-1')=60) or (xb='女' and datediff(year,cssj,'2005-1-1')=50 and ygxs like '%工%'

其中年份与时间的'2005','2005-1-1'是动态变化的,如何生成形如如下的代码呢
select 数量=count(*), 年份=2005 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2005-1-1')=60) or (xb='女' and datediff(year,cssj,'2005-1-1')=50 and ygxs like '%工%'
 union
select 数量=count(*), 年份=2006 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2006-1-1')=60) or (xb='女' and datediff(year,cssj,'2006-1-1')=50 and ygxs like '%工%'
union
select 数量=count(*), 年份=2007 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2007-1-1')=60) or (xb='女' and datediff(year,cssj,'2007-1-1')=50 and ygxs like '%工%'
如输入2009则代码会依次类推union到2009年的时间
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lead001 2005-09-13
  • 打赏
  • 举报
回复
//函数
function TForm1.GetUnionSQL(Year: Integer): String;
const
SQL = 'select 数量=count(*), 年份=%d from jibenqingkuang where (xb=''男'' '
+ 'and datediff(year,cssj,''%d-1-1'')=60) or (xb=''女'' '
+ 'and datediff(year,cssj,''%d-1-1'')=50 and ygxs like ''%%工%%'' ';
CLStr = #13#10;
var
Strtmp: string;
i: Integer;
begin
Result := '';
for i := 2005 to Year do
begin
if Result = '' then
Result := Format(SQL, [i, i, i])
else
Result := Format('%s %s union %s ' + SQL , [Result, CLStr, CLStr, i, i, i])
end;
end;
//调用
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add( GetUnionSQL(2009) );
end;

//返回结果
{

select 数量=count(*), 年份=2005 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2005-1-1')=60) or (xb='女' and datediff(year,cssj,'2005-1-1')=50 and ygxs like '%工%'
union
select 数量=count(*), 年份=2006 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2006-1-1')=60) or (xb='女' and datediff(year,cssj,'2006-1-1')=50 and ygxs like '%工%'
union
select 数量=count(*), 年份=2007 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2007-1-1')=60) or (xb='女' and datediff(year,cssj,'2007-1-1')=50 and ygxs like '%工%'
union
select 数量=count(*), 年份=2008 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2008-1-1')=60) or (xb='女' and datediff(year,cssj,'2008-1-1')=50 and ygxs like '%工%'
union
select 数量=count(*), 年份=2009 from jibenqingkuang where (xb='男' and datediff(year,cssj,'2009-1-1')=60) or (xb='女' and datediff(year,cssj,'2009-1-1')=50 and ygxs like '%工%'
}
pdsly 2005-09-13
  • 打赏
  • 举报
回复
要生成的如下形式
edit1输入2005-1-1 ,edit2输入2008-12-31则会统计出如下数据
数量  年份
1000 2005
1200 2006
1100 2007
1200 2008

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧