在Crosstab查询的基础上进行表查询

时间:2015-01-19 08:20:07

标签: sql-server database sql-server-2012 access-vba ms-access-2007

我正在从MS Access 2007迁移到SQL Server 2012 Express。最近我面临着奇怪的Access前端行为。

在我们的一个基于MS Access的应用程序中,我模拟Excel样式以在连续表单上输入员工工时数据。在Open事件子例程中为此表单准备记录集。在Soubroutine中,我有三个MakeTable查询,其中我将四个参数传递给它们。所有查询都相应地基于交叉表查询。我保存了所有查询,所以我通过名称在子例程中调用它们(设置querydef并传递所有参数)。

但问题实际上与子程序无关:

所有MakeTable查询都会执行而不会出现错误。但是,只有第一个表有记录。其他两个是空的。

  • 如果我手动将参数传递给每个Crosstab查询,我会看到所有三个中的记录。

  • 如果我手动将参数传递给每个MakeTable查询,我只会在第一个表中看到记录。另外两个是空的!

最有趣的是它仅适用于SQL Server BackEnd。如果我使用MS Access BackEnd完成所有步骤,那么一切正常!

1 个答案:

答案 0 :(得分:0)

解决!刚刚在2个可进行查询中添加了GROUP BY。 仍然只有SQL Server BackEnd需要GROUP BY的奇怪问题。

PARAMETERS strMon Text ( 255 ), strDep Text ( 255 ), strEmp Text ( 255 ), strPam Text ( 255 );
TRANSFORM First(tbl_Tabel.GR0) AS strValue
SELECT tbl_Employee.EmplCodeID AS EmplCodeID1, tbl_Tabel.TabWHrsID, tbl_TabelWHrs.TabWHrs
FROM tbl_Employee LEFT JOIN (tbl_Tabel LEFT JOIN tbl_TabelWHrs ON tbl_Tabel.TabWHrsID = tbl_TabelWHrs.TabWHrsID) ON tbl_Employee.EmplCodeID = tbl_Tabel.EmplCodeID
WHERE (((IIf([strEmp]="AAAA","AAAA",[tbl_Employee]![EmplCodeID]))=[strEmp]) AND ((IIf([strDep]="AAA","AAA",[Dep]))=[strDep]) AND ((IIf([strPam]="AA","AA",[tbl_Employee]![FacSubID]))=[strPam]) AND ((tbl_TabelWHrs.TabMon)=[strMon]) AND ((tbl_Employee.EndOfAgr)>=LastDayLastMonthCust(DateSerial(Left([strMon],4),Right([strmon],2),"01")) Or (tbl_Employee.EndOfAgr) Is Null))
GROUP BY tbl_Employee.EmplCodeID, tbl_Tabel.TabWHrsID, tbl_TabelWHrs.TabWHrs
ORDER BY DatePart("d",[TabDate])
PIVOT DatePart("d",[TabDate]) IN ("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");