【发布时间】:2015-06-13 11:47:13
【问题描述】:
我有一个场景。不确定是否可以通过简单的sql查询。
表 1
create table table1 (rowno int,
fileid int,
filename varchar(50),
filedata varchar(50),
valid boolean
);
insert into table1 (RowNo , FileId , FileName , fileData , Valid) values
(1, 1, 'FileA', 'blah blah..', true),
(2, 1, 'FileA', 'blah blah..', true),
(3, 1, 'FileA', 'blah blah..', true),
(4, 1, 'FileA', 'blah blah..', true),
(1, 2, 'FileB', 'blah blah..', false),
(2, 2, 'FileB', 'blah blah..', true),
(3, 2, 'FileB', 'blah blah..', false);
上面会给出一个表格如下,-
RowNo | FileId | FileName | Data | Valid
1 |1 | FileA | blah blah.. | TRUE
2 |1 | FileA | blah blah.. | TRUE
3 |1 | FileA | blah blah.. | TRUE
4 |1 | FileA | blah blah.. | TRUE
1 |2 | FileB | blah blah.. | FALSE
2 |2 | FileB | blah blah.. | TRUE
3 |2 | FileB | blah blah.. | FALSE
表2
create table table2 (fileid int,
rowno int,
errormsg varchar(100)
);
insert into table2 (fileid , rowno , errormsg ) values (2,1,'manatory field is blank');
insert into table2 (fileid , rowno , errormsg ) values (2,3,'date format is wrong');
上面会给出一个表格如下,-
FILEID |ROWNO |ERRORMSG
2 |1 |manatory field is blank
2 |3 |date format is wrong
如果我用下面的查询加入上表,-
select distinct t1.FILENAME,tot.TOTALREC, VALIDREC,coalesce((tot.TOTALREC- VALIDREC),0)INVALIDREC, t2.Rowno , case when coalesce((tot.TOTALREC- VALIDREC),0)=0 then null else t1.filedata end as ErrorData , t2.errormsg as ErrorMessage
from table1 t1
join (select count(*) totalrec, fileid from table1 group by fileid)tot on t1.fileid=tot.fileid
join (select count(*) VALIDREC , fileid from table1 where valid=true group by fileid)valid on t1.fileid=valid.fileid
left outer join table2 t2 on t1.fileid=t2.fileid
order by t1.FILENAME;
我得到以下结果,-
实际结果
FILENAME | TOTALREC | VALIDREC | INVALIDREC | ROWNO | ERRORDATA | ERRORMESSAGE
FileA | 4 | 4 | 0 | null | null | null
FileB | 3 | 1 | 2 | 1 |blah blah..| manatory field is blank
FileB | 3 | 1 | 2 | 3 |blah blah..| date format is wrong
但我需要一个如下的结果集。
预期结果
FILENAME |TOTALREC|VALIDREC|INVALIDREC|ROWNO| ERRORDATA | ERRORMESSAGE
FileA | 4 | 4 | 0 | null| null | null
FileB | 3 | 1 | 2 | 1 |blah blah..| manatory field is blank
| | | | 3 |blah blah..| date format is wrong
(注意最后一行的前四列。)
如果可以的话,谁能帮我查询一下?
更新: 按照你们中的许多人的要求澄清我的要求。
【问题讨论】:
-
我确信无论您尝试做什么都是可能的。但是,正如发布的那样,您要做什么非常不清楚。
-
你能简单解释一下为什么预期的结果只是这样吗?
-
在 SQL Server 中是可能的。不了解 MySQL。
-
您在寻找哪个:MySQL 还是 SQL Server?
-
@halfer--> 数据库可以是任何东西。就我而言,它是 H2 数据库。
标签: mysql sql-server optimization h2 outer-join