'union' 为什么多了一行空行(200分)

  • 主题发起人 主题发起人 gblovezx
  • 开始时间 开始时间
G

gblovezx

Unregistered / Unconfirmed
GUEST, unregistred user!
我的sql语句
strSql1 := 'select b.商品名称,b.规格型号,Sum(b.数量) as 总数量,b.单价,Sum(b.金额) as 总金额,Sum(b.税额) 总税额 '+ ' from 销项发票.DB a,销项发票销货清单.DB b ,bh_invoice.DB c '+ ' where c.类别代码=b.类别代码 and c.发票号码=b.发票号码 and a.类别代码=c.类别代码 and a.发票号码=c.发票号码 and c.购方名称<>'''' and c.类别代码<>'''' and a.作废标志=false and a.所属月份='+cbbY.Text+''+' group by b.规格型号,b.商品名称,b.单价';

strSql2 := 'select b.商品名称,b.规格型号,Sum(b.数量) as 总数量,b.单价,Sum(b.金额) as 总金额,Sum(b.税额) 总税额 '+' from 销项发票.DB a,销项发票明细.DB b,bh_invoice.DB c '+' where c.类别代码=b.类别代码 and c.发票号码=b.发票号码 and a.类别代码=c.类别代码 and a.发票号码=c.发票号码 and c.购方名称<>'''' and c.类别代码<>'''' and a.作废标志=false and b.商品名称 not like '''+'%详见销货清单%'+''''+' and a.所属月份='+cbbY.Text+''+ group by b.规格型号,b.商品名称,b.单价';
strSql := strSql1 + ' union ALL ' + strSql2+' order by 规格型号 desc';
try
qry1.Close;
qry1.DatabaseName := pub_DataBaseName;
qry1.SQL.Clear;
qry1.SQL.Text := [red]strSql ; [/red]
qry1.Open;
except
on E:Exception do
ShowErr('数据库查询失败!'+#13+E.Message);
end;
上面的语句查询出来就多了一行空行,分别查询strSql1,strSql2 就好着,大侠告诉我为什么?怎么能解决,谢谢了。
 
如果单个SQL语句查询出来没有空记录的话,全连接出来的结果也不应该有空记录,不知你所谓的"空行"是显示效果问题,还是记录数问题
 
我测试测试过,单个查询如果没有符合条件的记录的话就出现一条空的记录,和到一起的话,如果没有符合条件的记录的话就出现两条条空的记录。那怎么解决呢?
 
统计一下查询语句所得的记录数(Count),看与你显示效果的记录数是否一致?
 
union 合并记录相同项
 
:woshisunyi
我不能用 union 因为不能合并相同的项,如果两个查询都有相同的项,那么就少一个记录了。
:bjaman
我用的是 qry1.RecordCount 测试的。
单个查询如果没有符合条件的记录的话就出现一条空的记录 qry1.RecordCount:= 1
和到一起的话,如果没有符合条件的记录的话就出现两条条空的记录 qry1.RecordCount:= 2
如果有符合条件的和到一起就多了一条空记录qry1.RecordCount:= 实际记录数+1
 
UNION
指定组合多个结果集并将其作为单个结果集返回。

ALL
在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。

你去掉ALL就可以去除重复行
另外,建议你用Select Count()的方法测试一下你的复合SQL语句的结果集
 
我用Count()测试过,没有问题的,但是在DBGridEh 显示出来就是多了一行空行。我就无奈了。
 
“单个查询如果没有符合条件的记录的话就出现一条空的记录,和到一起的话,如果没有符合条件的记录的话就出现两条条空的记录。那怎么解决呢?”
union all就是这个效果,没有办法的,建议在现实查询结果时候将空值过滤掉。
 
TO gophie 怎么在现实查询结果过滤呢?
 
呵呵~~~~~说明SQL查询没有问题,是显示问题。有空的话,请求一下远程协助,我帮你看看
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部