【发布时间】:2014-03-11 15:37:24
【问题描述】:
我只需要一个简单的查询,比如 GROUP BY CASE
SELECT
COUNT([Personnel].[PERSONNEL_ID]) AS value,
CASE
WHEN ([Personnel].[T_FIRSTNAME] = 'John') THEN 'John'
ELSE 'somethingelse'
END AS somelabel
FROM [Personnel]
GROUP BY
CASE
WHEN ([Personnel].[T_FIRSTNAME] = 'John') THEN 'John'
ELSE 'somethingelse'
END
在 Sqlalchemy 中,我的查询如下所示:
case_groups = case(
[(HrPersonnel.T_FIRSTNAME=='John', 'John')],
else_='somethingelse'
)
volunteers = session_mssql.query(
func.count(HrPersonnel.S_HR_PERSONNEL_ID).label('value'),
case_groups.label('somelabel'))\
.group_by(case_groups)\
.all()
mssql server 执行查询没有任何问题(engine.connect().execute(text_query))
但是 Sqlalchemy ORM 查询给了我一个错误。
文件 "c:\projects\sa_test\eggs\sqlalchemy-0.9.2-py2.7.egg\sqlalchemy\engine\default.py", 第 425 行,在 do_execute cursor.execute(statement, parameters) sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server] 栏目 'Personnel.T_FIRSTNAME' 在选择列表中无效,因为它是 不包含在聚合函数或 GROUP BY 子句中。 (8120) (SQLExecDirectW); [42000] [微软][ODBC SQL 服务器 驱动程序][SQL Server]无法准备语句。 (8180)") u'SELECT count([Personnel].[PERSONNEL_ID]) 作为值,CASE WHEN ([人员].[T_FIRSTNAME] = ?) 那么?别的 ? END AS somelabel \nFROM [Personnel] GROUP BY CASE WHEN ([Personnel].[T_FIRSTNAME] = ?) THEN ? 别的 ? END' ('John', 'John', 'somethingelse', 'John', 'John', '别的东西')
为什么“Personnel.T_FIRSTNAME”在选择列表中无效?
欢迎提出任何建议。 谢谢,
【问题讨论】:
-
我似乎也有同样的问题。有什么解决办法吗?
标签: sql-server sqlalchemy