MS访问SQL查询问题

Jam*_*mes 4 sql sql-server ms-access

我有这个应该在MS Access中使用的查询,但数据库是一个SQL数据库.当我在SQL环境中运行此查询时,它完美地工作.但是,在MS Access中运行时,我会收到错误.我对SQL的了解很少(来自MySQL),更不用说MS Access了.

该查询应该为我提供某个投标人类型中对某个项目进行投标的总人数(无论他们是否赢了),该投标人类型中赢得的项目的总价格以及投标人类型,所有这些都是单拍卖.这是下面的查询.

SELECT     Total.count, SUM(dbo_tblItem.item_premium + dbo_tblItem.item_pr) AS SumTotal, dbo_tblBidder.bidder_type
FROM         dbo_tblBidder LEFT OUTER JOIN
                  dbo_tblItem ON dbo_tblItem.item_bidder_number = dbo_tblBidder.bidder_number   AND 
                  dbo_tblItem.item_sale_id = dbo_tblBidder.bidder_sale_id LEFT OUTER JOIN
                      (SELECT     COUNT(bidder_type) AS count, bidder_type
                        FROM          dbo_tblBidder AS tblBidder_1
                        WHERE      (bidder_sale_id = 235)
                        GROUP BY bidder_type) AS Total ON dbo_tblBidder.bidder_type = Total.bidder_type
WHERE     (dbo_tblBidder.bidder_sale_id = 235)
GROUP BY dbo_tblBidder.bidder_type, Total.count
ORDER BY dbo_tblBidder.bidder_type
Run Code Online (Sandbox Code Playgroud)

MS Access告诉我:

查询表达式中的语法错误(缺少运算符)".

然后,它突出显示来自dbo_tblBidder.bidder_number的"mber",其中说:

dbo_tblItem ON dbo_tblItem.item_bidder_number = dbo_tblBidder.bidder_number

我不知道突出显示是否实际上是任何事物的一部分.

Han*_*sUp 5

当您加入2个以上的表格时,Access需要使用括号,并且对于它们的展示位置非常挑剔.(虽然您的查询的一个数据源是子查询而不是实际的表,但它被视为关于连接和括号的表.)建议您在Access'查询设计器中将其构建为新查询,只是为了查看它如何放置括号为你的联合表.

"count"是一个保留字,所以我在查询中出现的地方括起来,以减少混淆数据库引擎的可能性.

对于Access的数据库引擎,使用LEFT JOIN而不是LEFT OUTER JOIN.

我认为这可能接近你所需要的.

SELECT
    Total.[count],
    SUM(dbo_tblItem.item_premium + dbo_tblItem.item_pr) AS SumTotal,
    dbo_tblBidder.bidder_type
FROM         
    (dbo_tblBidder LEFT JOIN dbo_tblItem
        ON (dbo_tblItem.item_bidder_number = dbo_tblBidder.bidder_number
           AND dbo_tblItem.item_sale_id = dbo_tblBidder.bidder_sale_id)
        )
    LEFT JOIN (
        SELECT     COUNT(bidder_type) AS [count], bidder_type
        FROM          dbo_tblBidder
        WHERE      bidder_sale_id = 235
        GROUP BY bidder_type
        ) AS Total
        ON dbo_tblBidder.bidder_type = Total.bidder_type
WHERE     dbo_tblBidder.bidder_sale_id = 235
GROUP BY dbo_tblBidder.bidder_type, Total.[count]
ORDER BY dbo_tblBidder.bidder_type;
Run Code Online (Sandbox Code Playgroud)