各位大侠进来看看,这句sql该怎么优化,自己看了都很恶心。。
我的本意是要在:
SELECT a.id,a.wizard_id,a.challenge_number,a.status,a.[file_id],b.title,b.date_deadline,b.award_amount,b.created_by
FROM challenges a
INNER JOIN challenges_version b ON a.id=b.challenge_id
WHERE b.version=a.current_version
这个集后面添加3列。。3列的数据来自3个子查询。
子查询1:
SELECT COUNT(*) as workingon,challenge_id
FROM dbo.challenge_engagements
GROUP BY challenge_id
子查许2:
SELECT COUNT(*) as totoalsubmissions,challenge_id as testid
FROM dbo.submissions
GROUP BY challenge_id
子查询3:
SELECT COUNT(*) as totalsubmissions,challenge_id as test2id
FROM dbo.submissions WHERE status='Forwarded'
GROUP BY challenge_id
因为涉及到排序,所以只能用一条sql语句。。
前台数据显示用gridview + sqlDatasource展现
下面是我写的sql语句,总觉得层数太多了
SELECT id,wizard_id,challenge_number,status,[file_id],title,date_deadline,award_amount,ISNULL(workingon,0) AS 'working on',ISNULL(totalSubmissions,0) AS 'total submissions',created_by FROM (
SELECT * FROM
(
SELECT COUNT(*) as workingon,challenge_id
FROM dbo.challenge_engagements
GROUP BY challenge_id
) c RIGHT OUTER JOIN
(
SELECT a.id,a.wizard_id,a.challenge_number,a.status,a.[file_id],b.title,b.date_deadline,b.award_amount,b.created_by
FROM challenges a
INNER JOIN challenges_version b ON a.id=b.challenge_id
WHERE b.version=a.current_version
) d ON c.challenge_id = d.id
) e RIGHT OUTER JOIN
(
SELECT COUNT(*) as totoalsubmissions,challenge_id as testid
FROM dbo.submissions
GROUP BY challenge_id
) f ON e.id=f.testid LEFT JOIN
(SELECT COUNT(*) as totalsubmissions,challenge_id as test2id
FROM dbo.submissions WHERE status='Forwarded'
GROUP BY challenge_id
) g ON e.id = g.test2id