1

我有一个复杂的 SQL 语句,我遇到了一个错误。他们提示我这个错误: GROUP BY 表达式中的错误。无法解析查询文本。

我粘贴了导致此错误的此 SQL 语句。谁能告诉我哪里出了问题?有任何想法吗???

SELECT        AllocationDate, LocationName, StationName, Hour1, Hour2, Hour3, Hour4, Hour5, Hour6, Hour7, Hour8, Hour9, Hour10, Hour11, Hour12, EmpName, ShiftTime, 
                     BreakTime, SignIn, SignOut
FROM            (SELECT        z.AllocationDate, z.LocationName, z.StationName, a.Hour1, b.Hour2, c.Hour3, d .Hour4, e.Hour5, f.Hour6, g.Hour7, h.Hour8, i.Hour9, j.Hour10, k.Hour11, 
                                                l.Hour12, m.EmpName, m.ShiftTime, m.BreakTime, m.SignIn, m.SignOut
                      FROM            (SELECT DISTINCT AllocationDate, LocationName, StationName
                                                FROM            satsschema.viewmain
                                                WHERE        (StationName IS NOT NULL)) z LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour1
                                                      FROM            satsschema.view00000100) a ON z.LocationName = a.LocationName AND z.StationName = a.StationName AND 
                                                z.AllocationDate = a.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour2
                                                      FROM            satsschema.view01000200) b ON z.LocationName = b.LocationName AND z.StationName = b.StationName AND 
                                                z.AllocationDate = b.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour3
                                                      FROM            satsschema.view02000300) c ON z.LocationName = c.LocationName AND z.StationName = c.StationName AND 
                                                z.AllocationDate = c.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour4
                                                      FROM            satsschema.view03000400) d ON z.LocationName = d .LocationName AND z.StationName = d .StationName AND 
                                                z.AllocationDate = d .AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour5
                                                      FROM            satsschema.view04000500) e ON z.LocationName = e.LocationName AND z.StationName = e.StationName AND 
                                                z.AllocationDate = e.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour6
                                                      FROM            satsschema.view05000600) f ON z.LocationName = f.LocationName AND z.StationName = f.StationName AND 
                                                z.AllocationDate = f.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour7
                                                      FROM            satsschema.view06000700) g ON z.LocationName = g.LocationName AND z.StationName = g.StationName AND 
                                                z.AllocationDate = g.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour8
                                                      FROM            satsschema.view07000800) h ON z.LocationName = h.LocationName AND z.StationName = h.StationName AND 
                                                z.AllocationDate = h.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour9
                                                      FROM            satsschema.view08000900) i ON z.LocationName = i.LocationName AND z.StationName = i.StationName AND 
                                                z.AllocationDate = i.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour10
                                                      FROM            satsschema.view09001000) j ON z.LocationName = j.LocationName AND z.StationName = j.StationName AND 
                                                z.AllocationDate = j.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour11
                                                      FROM            satsschema.view10001100) k ON z.LocationName = k.LocationName AND z.StationName = k.StationName AND 
                                                z.AllocationDate = k.AllocationDate LEFT OUTER JOIN
                                                    (SELECT DISTINCT AllocationDate, LocationName, StationName, Hour12
                                                      FROM            satsschema.view11001200) l ON z.LocationName = l.LocationName AND z.StationName = l.StationName AND 
                                                z.AllocationDate = l.AllocationDate LEFT OUTER JOIN
                                                    (SELECT        a.EmpName, CONCAT(b.StartTime, ' - ', b.EndTime) AS ShiftTime, CONCAT(a.EmpTime, ' - ', ADDTIME(a.EmpTime, '0 1:0:0.000000')) 
                                                                                AS BreakTime, a.Break, a.EmployeeOnBreak, '' AS SignIn, '' AS SignOut
                                                      FROM            satsschema.employeeslot a, satsschema.ufis b
                                                      WHERE        a.UFISEmpGroup = b.UFISID 
                                                     GROUP BY EmpName) m) Morning
WHERE        (AllocationDate = @AllocationDate) AND (LocationName = @LocationName) AND (StationName <> '') AND (Break = 1)
GROUP BY StationName, LocationName, AllocationDate
4

2 回答 2

0

如果您想这样做,只能在外部查询中选择聚合函数或分组列。您可以在分组依据中使用该列。

... GROUP BY AllocationDate, LocationName, StationName, Hour1, Hour2, Hour3, Hour4, Hour5, Hour6, Hour7, Hour8, Hour9, Hour10, Hour11, Hour12, EmpName, ShiftTime, BreakTime, SignIn, SignOut

谢谢。

于 2012-09-13T08:51:40.697 回答
0

我认为你混合了很多概念。如果没有 Min、Max、Avg 等聚合函数,您将无法使用 group by。

如果要使用 Group By,则必须说明如何处理这些非聚合字段:

Hour1, Hour2, Hour3, Hour4, Hour5, Hour6, Hour7, Hour8, Hour9, Hour10, Hour11, Hour12, EmpName, ShiftTime, BreakTime, SignIn, SignOut

我认为您想要的是 ORDER BY 而不是 GROUP BY。

于 2012-09-13T08:39:22.147 回答