求解正确的sql语句解决方案

求解正确的sql语句

SELECT id,convert(varchar(13),date,120),[type],count(*) FROM 
(select * from barcode_2d WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_n WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_sep_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_sep WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00')a 
GROUP BY convert(varchar(13),date,120) ORDER BY convert(varchar(13),date,120) ASC


结果报错:Column 'a.ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

求正确结果及原因,谢谢!

------解决方案--------------------
SELECT id,convert(varchar(13),date,120),[type],count(*) FROM 
(select * from barcode_2d WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_n WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_sep_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_sep WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00')a 
GROUP BY id,convert(varchar(13),date,120) ORDER BY convert(varchar(13),date,120) ASC
------解决方案--------------------
在group by中加了id列,改成这样试试:


SELECT id,convert(varchar(13),date,120),[type],count(*) FROM 
(select * from barcode_2d WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_n WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select * from barcode_2d_sep_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr_temp WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_qr WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00' 
union all 
select id,username,packageno,lotno,description,[type],barcode,date from barcode_2d_sep WHERE date >= '2013-07-08 08:00:00' AND date < '2013-07-09 08:00:00')a 
GROUP BY id,convert(varchar(13),date,120) ORDER BY convert(varchar(13),date,120) ASC