我正在尝试将两个查询组合成一个sql服务器直通查询(PTQ)。当在Access中单独编码时,这两个查询都可以工作。当将这些访问代码组合到一个查询中时,它仍然可以在Access中工作。但是,当我将字段名格式化为T-sql,并尝试作为PTQ运行时,我在"GROUP“附近得到一个语法错误。当我删除这个"GROUP BY“行时,我在";”附近得到一个语法错误。
SELECT jaar,
maand,
wicode,
pg_intern_code,
pg_kriss_code,
pg_kriss_naam,
Count(pc0517.dbo.resul.klavnr) AS AantalVanKLAVNR
FROM (SELECT Year(pc0517.dbo.resul.created) AS JAAR,
Month(pc0517.dbo.resul.created) AS MAAND,
pc0517.dbo.resul.wicode,
dbo.tblproductgroep_intern.pg_intern_code,
dbo.tblproductgroep_kriss.pg_kriss_code,
dbo.tblproductgroep_kriss.pg_kriss_naam,
pc0517.dbo.resul.klavnr
FROM (dbo.tblproductgroep_kriss
INNER JOIN (dbo.tblproductgroep_intern
INNER JOIN dbo.tblrobbe_pg
ON dbo.tblproductgroep_intern.pg_intern_id =
dbo.tblrobbe_pg.pg_code_intern_id)
ON dbo.tblproductgroep_kriss.pg_kriss_id =
dbo.tblrobbe_pg.pg_code_kriss_id)
INNER JOIN pc0517.dbo.resul
ON dbo.tblrobbe_pg.robbe_pg_naam =
pc0517.dbo.resul.prcode
WHERE ( ( Year(pc0517.dbo.resul.created) = 2012 )
AND ( pc0517.dbo.resul.kanaal = "gg" ) ))
GROUP BY jaar,
maand,
wicode,
pg_intern_code,
pg_kriss_code,
pg_kriss_naam; 其他PTQ在同一数据库上(甚至与PC0517数据库结合),没有任何故障,但我对SQL-server完全陌生,所以我还不知道所有的约定,可能忽略了一些基本的东西……
提亚
发布于 2012-06-13 20:14:21
我更正了一系列错误:(1)按正确的顺序放置连接(2)删除错误的圆括号(3)添加表别名以提高可读性(4)删除"gg"两边的双引号(5)使对r.created的查询成为一个开放范围,以便在索引存在的情况下可以使用它。我还从grouping的内部查询中删除了jaar -基于where子句,它只能是2012。
我不知道如果您将它粘贴回那里,Access将如何处理它,但您应该能够确认这是一个比通过直接对SQL Server运行它为您生成的垃圾访问更正确的查询。如果Access仍然破坏了这一点,我将把它放在SQL Server中的存储过程或视图中,并指向该存储过程或视图。
SELECT
jaar = 2012,
maand,
wicode,
pg_intern_code,
pg_kriss_code,
pg_kriss_naam,
COUNT(klavnr) AS AantalVanKLAVNR
FROM
(
SELECT
maand = MONTH(r.created),
r.wicode,
i.pg_intern_code,
k.pg_kriss_code,
k.pg_kriss_naam,
r.klavnr
FROM
dbo.tblproductgroep_kriss AS k
INNER JOIN dbo.tblrobbe_pg AS tr
ON k.pg_kriss_id = tr.pg_code_kriss_id
INNER JOIN dbo.tblproductgroep_intern AS i
ON i.pg_intern_id = tr.pg_code_intern_id
INNER JOIN pc0517.dbo.resul AS r
ON tr.robbe_pg_naam = r.prcode
WHERE
r.created >= '20120101' AND r.created < '20130101'
AND r.kanaal = 'gg'
) AS x
GROUP BY
maand,
wicode,
pg_intern_code,
pg_kriss_code,
pg_kriss_naam; 它也可以简化为:
SELECT
jaar = 2012,
maand = MONTH(r.created),
r.wicode,
i.pg_intern_code,
k.pg_kriss_code,
k.pg_kriss_naam,
r.klavnr
FROM
dbo.tblproductgroep_kriss AS k
INNER JOIN dbo.tblrobbe_pg AS tr
ON k.pg_kriss_id = tr.pg_code_kriss_id
INNER JOIN dbo.tblproductgroep_intern AS i
ON i.pg_intern_id = tr.pg_code_intern_id
INNER JOIN pc0517.dbo.resul AS r
ON tr.robbe_pg_naam = r.prcode
WHERE
r.created >= '20120101' AND r.created < '20130101'
AND r.kanaal = 'gg'
GROUP BY
MONTH(r.created),
r.wicode,
i.pg_intern_code,
k.pg_kriss_code,
k.pg_kriss_naam; (换句话说,子查询似乎没有必要。)
https://stackoverflow.com/questions/11014430
复制相似问题