MySQL 派生 Table 问题

MySQL Derived Table Issue

我希望能够从下面的查询中输出以下字段:

AddedById,AddedByName,HoursWorked,CurrentYearlyFlexiAvailable

但是我有 WHERE addedby=1,我想用字段名 AddedById 替换它,因为我没有想要硬编码这个值作为整体查询应该并且将 return 不止一个人,我想从 rpt_timesheet_data 视图中获取这个值,这是那里。 CurrentYearlyFlexiAvailable 字段应该通过在 SELECT SUM(ttl)FROM (SELECT SUM(worked)-420 as ttl

SELECT AddedById,AddedByName,SUM(HoursWorked) AS HoursWorked 
,(SELECT SUM(ttl) - (
                SELECT SUM(worked) 
                FROM vwtimesheet
                WHERE addedby=AddedById 
                AND entrydate BETWEEN '2017-01-01' AND '2017-04-13' 
                AND activityid=3192 
                GROUP BY addedby ) AS flexihours 

        FROM (
            SELECT SUM(worked)-420 AS ttl 
            FROM vwtimesheet 
            WHERE addedby=1 <!--HERE IS THE ISSUE
            AND entrydate BETWEEN '2017-01-01' AND '2017-04-13' 
            AND projectid<>113 AND activityid<>3192 
            GROUP BY entrydate 
            HAVING SUM(worked)>420
        ) AS s) AS CurrentYearlyFlexiAvailable
FROM rpt_timesheet_data
WHERE entrydate BETWEEN '2017-04-02' AND '2017-04-13 23:59:59' 
AND ActivityId=3192 
GROUP BY AddedById,AddedByName 
ORDER BY AddedByName

但我不断收到:

Error Code: 1054. Unknown column 'AddedById' in 'where clause'

就在那个地方。我尝试了各种查询来对此进行排序,但就是无法弄清楚。抱歉不好解释这个,可以在我的脑海里看到我想做什么...

这是一个查询,它做的事情非常相似,因为它 return 是单个用户的结果,而上面的查询是为了遍历所有用户并给我结果:-

    SELECT addedbyname, SUM(ttl) - 
    (SELECT SUM(worked) 
        FROM vwtimesheet 
        WHERE addedby=1 
        AND entrydate BETWEEN '2017-01-01' AND '2017-04-13' 
        AND activityid=3192 
        GROUP BY addedby ) AS CurrentYearlyFlexiAvailable 
    ,(SELECT SUM(worked) FROM vwtimesheet 
        WHERE addedby=1 
        AND entrydate BETWEEN '2017-01-01' AND '2017-04-13' 
        AND activityid=3192 
        GROUP BY addedby ) AS flexiused 
    ,(SELECT sum(worked) FROM vwtimesheet 
        WHERE addedby=1 
        AND entrydate BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') AND curdate() 
        AND activityid=3192
        GROUP BY addedby ) as fleximonthused 
FROM ( SELECT entrydate,addedbyname,SUM(worked)-420 AS ttl FROM vwtimesheet 
    WHERE addedby=1 
    AND entrydate BETWEEN '2017-01-01' AND '2017-04-13' 
    AND projectid<>113 
    AND activityid<>3192 
    GROUP BY entrydate,addedbyname
    HAVING SUM(worked)>420 
) AS s 

请尝试以下...

SELECT AddedById,
       AddedByName,
       SUM( HoursWorked ) AS HoursWorked,
       SUM( ttl ) - sumWorked AS CurrentYearlyFlexiAvailable
FROM ( SELECT AddedById AS AddedById,
              AddedByName AS AddedByName
       FROM rpt_timesheet_data
       GROUP BY AddedById
     ) AS AddedByFinder
JOIN ( SELECT addedby AS addedby,
              entrydate AS entrydate,
              SUM( worked ) - 420 AS ttl
       FROM vwtimesheet
       WHERE entrydate BETWEEN '2017-01-01' AND '2017-04-13'
         AND projectid <> 113
         AND activityid <> 3192
       GROUP BY addedby,
                entrydate
       HAVING SUM( worked ) > 420
     ) AS ttlFinder ON AddedByFinder.AddedById = ttlFinder.addedby
JOIN ( SELECT addedby AS addedby,
              SUM( worked ) AS sumWorked
       FROM vwtimesheet
       WHERE entrydate BETWEEN '2017-01-01' AND '2017-04-13'
         AND activityid = 3192
       GROUP BY addedby
     ) sumWorkedFinder ON AddedByFinder.AddedById = sumWorkedFinder.addedby
WHERE entrydate BETWEEN '2017-04-02' AND '2017-04-13 23:59:59'
  AND ActivityId = 3192
GROUP BY AddedById,
         AddedByName 
ORDER BY AddedByName;

(后续解释...)

如果您有任何问题或意见,请随时post发表相应的评论。