日期:2014-05-17  浏览次数:21072 次

为什么Goup by里面有时候定义别名无效呢?
SELECT
  HEAD.PNO PNO, 
  SUM(MEI.KOSI) SI,
  SUM(MEI.AMOUNT) AMOUNT
FROM
  AHEAD HEAD  
  LEFT JOIN
  BMEI MEI  
  ON  
  HEAD.PAYYOTENO = MEI.PAYYOTENO
  LEFT JOIN
  MSMASTER MMASTER 
  ON
  MEI.CODE = MMASTER.KEY2
  AND MMASTER.KBN = 'AA'
  AND MMASTER.EY1 = 'NAME'
WHERE
  HEAD.COMPANYID = 'T0'
  AND HEAD.PAYDAY = '20070331'
  AND HEAD.VALIDSTATUS = '0'
GROUP BY
  PAYNO

如上面的SQL,为什么这样写就执行不过,但把‘PAYNO’换成‘HEAD.PNO’就可以执行呢?



------解决方案--------------------
是不是其他的表也有PAYNO这个字段呢?

------解决方案--------------------
列别名只能出现在 order by 子句中,where 和 group by 子句中都不能使用列别名。Oracle SQL 的语法就是这样。
------解决方案--------------------
如上面的SQL,为什么这样写就执行不过,但把‘PAYNO’换成‘HEAD.PNO’就可以执行呢?

============================================

SELECT 中出现的字段(除了使用组函数的字段之外)必须出现在GROUP BY 语句里

------解决方案--------------------
order by 是可以用别名的。
group by 就不可能用别名。
除非嵌套一层sql