【问题标题】:Access SQL Query IIF statement Too ComplexAccess SQL 查询 IIF 语句太复杂
【发布时间】:2016-06-21 20:22:47
【问题描述】:

我正在使用 Access 数据库并使用 IFF 编写查询以输出类似这样的缩写状态

IIf(Trim(CtblStates.StateName) = 'New York', 'NY', 
IIf(Trim(CtblStates.StateName) = 'Maryland', 'MD', 
IIf(Trim(CtblStates.StateName) = 'Virginia', 'VA', 
IIf(Trim(CtblStates.StateName) = 'New Jersey', 'NJ', 
IIf(Trim(CtblStates.StateName) = 'District of Columbia', 'DC', 
IIf(Trim(CtblStates.StateName) = 'Florida', 'FL', 
IIf(Trim(CtblStates.StateName) = 'West Virginia', 'WV', 
IIf(Trim(CtblStates.StateName) = 'Georgia', 'GA', 
IIf(Trim(CtblStates.StateName) = 'Alabama', 'AL', 
IIf(Trim(CtblStates.StateName) = 'Alaska', 'AK', 
IIf(Trim(CtblStates.StateName) = 'California', 'CA', 
IIf(Trim(CtblStates.StateName) = 'Pennsylvania', 'PA',
IIf(Trim(CtblStates.StateName) = 'Delaware', 'DE',
CtblStates.StateName  )))))))))))))   AS State, 

当我尝试添加更多状态时,我得到了“IFF 语句太复杂”。 我知道你只能添加这么多的IIF语句,但我需要处理 50 个州中的每一个。我该如何解决这个问题?

谢谢

【问题讨论】:

  • 添加带缩写的状态表并在连接中使用
  • 我同意@JohnCappelletti 的观点,JNevill 为您准备了一张漂亮的桌子。如果您真的不能或不想添加表,请使用 SWITCH 语句而不是 IIF

标签: sql ms-access


【解决方案1】:

只是为了帮助@JohnCappelletti 的建议更容易添加新表的 SQL 如下。然后将其加入到您的查询中。

CREATE TABLE states (stateName CHAR, stateAbbr CHAR);
INSERT INTO states (stateName, stateAbbr) VALUES ('Alabama','AL');
INSERT INTO states (stateName, stateAbbr) VALUES ('Alaska','AK');
INSERT INTO states (stateName, stateAbbr) VALUES ('Arizona','AZ');
INSERT INTO states (stateName, stateAbbr) VALUES ('Arkansas','AR');
INSERT INTO states (stateName, stateAbbr) VALUES ('California','CA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Colorado','CO');
INSERT INTO states (stateName, stateAbbr) VALUES ('Connecticut','CT');
INSERT INTO states (stateName, stateAbbr) VALUES ('Delaware','DE');
INSERT INTO states (stateName, stateAbbr) VALUES ('Florida','FL');
INSERT INTO states (stateName, stateAbbr) VALUES ('Georgia','GA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Hawaii','HI');
INSERT INTO states (stateName, stateAbbr) VALUES ('Idaho','ID');
INSERT INTO states (stateName, stateAbbr) VALUES ('Illinois','IL');
INSERT INTO states (stateName, stateAbbr) VALUES ('Indiana','IN');
INSERT INTO states (stateName, stateAbbr) VALUES ('Iowa','IA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Kansas','KS');
INSERT INTO states (stateName, stateAbbr) VALUES ('Kentucky','KY');
INSERT INTO states (stateName, stateAbbr) VALUES ('Louisiana','LA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Maine','ME');
INSERT INTO states (stateName, stateAbbr) VALUES ('Maryland','MD');
INSERT INTO states (stateName, stateAbbr) VALUES ('Massachusetts','MA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Michigan','MI');
INSERT INTO states (stateName, stateAbbr) VALUES ('Minnesota','MN');
INSERT INTO states (stateName, stateAbbr) VALUES ('Mississippi','MS');
INSERT INTO states (stateName, stateAbbr) VALUES ('Missouri','MO');
INSERT INTO states (stateName, stateAbbr) VALUES ('Montana','MT');
INSERT INTO states (stateName, stateAbbr) VALUES ('Nebraska','NE');
INSERT INTO states (stateName, stateAbbr) VALUES ('Nevada','NV');
INSERT INTO states (stateName, stateAbbr) VALUES ('New Hampshire','NH');
INSERT INTO states (stateName, stateAbbr) VALUES ('New Jersey','NJ');
INSERT INTO states (stateName, stateAbbr) VALUES ('New Mexico','NM');
INSERT INTO states (stateName, stateAbbr) VALUES ('New York','NY');
INSERT INTO states (stateName, stateAbbr) VALUES ('North Carolina','NC');
INSERT INTO states (stateName, stateAbbr) VALUES ('North Dakota','ND');
INSERT INTO states (stateName, stateAbbr) VALUES ('Ohio','OH');
INSERT INTO states (stateName, stateAbbr) VALUES ('Oklahoma','OK');
INSERT INTO states (stateName, stateAbbr) VALUES ('Oregon','OR');
INSERT INTO states (stateName, stateAbbr) VALUES ('Pennsylvania','PA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Rhode Island','RI');
INSERT INTO states (stateName, stateAbbr) VALUES ('South Carolina','SC');
INSERT INTO states (stateName, stateAbbr) VALUES ('South Dakota','SD');
INSERT INTO states (stateName, stateAbbr) VALUES ('Tennessee','TN');
INSERT INTO states (stateName, stateAbbr) VALUES ('Texas','TX');
INSERT INTO states (stateName, stateAbbr) VALUES ('Utah','UT');
INSERT INTO states (stateName, stateAbbr) VALUES ('Vermont','VT');
INSERT INTO states (stateName, stateAbbr) VALUES ('Virginia','VA');
INSERT INTO states (stateName, stateAbbr) VALUES ('Washington','WA');
INSERT INTO states (stateName, stateAbbr) VALUES ('West Virginia','WV');
INSERT INTO states (stateName, stateAbbr) VALUES ('Wisconsin','WI');
INSERT INTO states (stateName, stateAbbr) VALUES ('Wyoming','WY');

【讨论】:

    【解决方案2】:

    不要那样做!

    使用“字典表”。将新表添加到 MS Access 数据库。定义 2 列。一个 - “全名”,第二个 - “短名”。然后添加相应的值:

    "New York" | "NY"
    "Maryland" | "MD"
    

    等等

    现在,使用join

    SELECT a.*, b.ShortName
    FROM YourTable As a INNER JOIN DictionaryTable AS b ON a.StateName = b.FullName;
    

    随时根据您的需要改进查询。

    【讨论】:

      【解决方案3】:

      因为你的表名我觉得你需要在表CtblStates上新建一个字段:

      1. 在表[CtblStates] 中添加一个名为State 的新字段,并根据每一行填写状态数据。
      2. 将您的查询替换为[CtblStates].State

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多