SQL - 左连接不适用于 switch 语句

Posted

技术标签:

【中文标题】SQL - 左连接不适用于 switch 语句【英文标题】:SQL - Left Join not working with switch statement 【发布时间】:2011-06-27 12:35:27 【问题描述】:

我使用的是 MS Access 2007。每当我键入 Left Join 时,我都会收到一条错误消息,指出不支持 Left Join。这是SQL

TRANSFORM Count([Letter Status].Customer_ID) AS CountOfCustomer_ID 
SELECT Switch(
            [Race_1]=1,"White",
            [Race_1]=2,"Black",
            [Race_1]=3,"Asian",
            [Race_1]=4,"Hispanic/Latino",
            [Race_1]=5,"American Indian/ Alaskan Native",
            [Race_1]=6,"Native Hawaiian or Pacific Islander",
            [Race_1]=7,"Multiracial",
            [Race_1]=8,"Other",
            [Race_1]=9,"Unknown"
        ) AS Race 
FROM Demographics 
    INNER JOIN (
        [Status] 
        INNER JOIN 
            Research 
                ON [Status].Customer_ID = Research.Customer_ID
        ) 
        ON (Demographics.ID = [Letter Status].Customer_ID) 
        AND (Demographics.ID = Research.Customer_ID) 
WHERE ((([Status].Count)=1)) 
GROUP BY [Status].Count, Demographics.Race_1 
ORDER BY Research.Store_site 
PIVOT Research.Store_site In (1,2,3,4,5,6,7,8,9,10);

有人可以使用上面的代码告诉我在哪里放置左连接以允许每个 Race 的行显示在表格中吗?另外,你能告诉我如何在这段代码中用 0 替换 Null 值吗?我曾尝试实现 NZ() 但没有成功。

请帮忙。

【问题讨论】:

【参考方案1】:

仔细查看您的 FROM 子句。

FROM Demographics 
    INNER JOIN (
        [Status] 
        INNER JOIN 
            Research 
                ON [Status].Customer_ID = Research.Customer_ID
        ) 
        ON (Demographics.ID = [Letter Status].Customer_ID) 
        AND (Demographics.ID = Research.Customer_ID) 

您有一个引用 [Letter Status] 的 ON 条件,但 [Letter Status] 不包含在您的源表中……您确实有一个称为 [Status]。

首先在查询设计器中构建 JOIN,这样您就知道您是从 Access 可以接受的 SQL 开始的。

并简化这件事,直到您整理好 JOIN。摆脱 Switch、TRANSFORM、PIVOT 和 GROUP BY,直到 JOIN 工作为止。

【讨论】:

以上是关于SQL - 左连接不适用于 switch 语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL中有几种连接?有啥区别?(左连右连内连和外连?)

将 SQL 代码(作为字符串)转换为表 - 动态数据透视

SQL 内连接到左连接表

GROUP_CONCAT 不适用于左连接

Laravel 查询生成器 order by 不适用于左连接

C#.Net与SQLSERVER连接语句?