Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使SQL代码正确显示?_Sql_Ms Access - Fatal编程技术网

如何使SQL代码正确显示?

如何使SQL代码正确显示?,sql,ms-access,Sql,Ms Access,我正在尝试根据值使用字母a、B、C或D更新“案例级别建议”字段。但是,代码可以工作,但是对于超过3的所有内容,代码只显示“B”。我该如何解决这个问题 代码如下: SELECT [Calculated Total].casemain_id, [Calculated Total].category, Sum([Calculated Total].Total) AS SumOfTotal, IIf([SumOfTotal]>=4,"B",IIf([SumOfTotal]<

我正在尝试根据值使用字母a、B、C或D更新“案例级别建议”字段。但是,代码可以工作,但是对于超过3的所有内容,代码只显示“B”。我该如何解决这个问题

代码如下:

SELECT [Calculated Total].casemain_id, [Calculated Total].category, Sum([Calculated Total].Total) AS SumOfTotal, IIf([SumOfTotal]>=4,"B",IIf([SumOfTotal]<=3,"A",IIf([SumOfTotal]>=6,"C",IIf([SumOfTotal]>=9,"D","C")))) AS [Case Level Suggested]
FROM [Calculated Total]
GROUP BY [Calculated Total].casemain_id, [Calculated Total].category;
选择[Calculated Total].casemain\u id[Calculated Total].category,Sum([Calculated Total].Total)作为SumOfTotal,IIf([SumOfTotal]>=4,“B”,IIf([SumOfTotal]=6,“C”,IIf([SumOfTotal]>=9,“D”,“C”))作为[建议的案例级别]
从[计算总数]
分组依据[Calculated Total].casemain\u id[Calculated Total].category;

您的问题是
IIf
的工作方式,根据它们在代码中的写入顺序从左到右:

  • 总数是否小于或等于3?-若有,则"A";
  • 总数是否大于或等于4?-如果是,那么“B”
假设这些是整数合计,那么这两个检查覆盖所有数字,其余的检查不进行。相反,请尝试:

SELECT [Calculated Total].casemain_id, [Calculated Total].category, Sum([Calculated Total].Total) AS SumOfTotal, 
IIf([SumOfTotal]<=3,"A",IIf([SumOfTotal]>=9,"D",IIf([SumOfTotal]>=6,"C",IIf([SumOfTotal]>=4,"B","C")))) AS [Case Level Suggested]
FROM [Calculated Total]
GROUP BY [Calculated Total].casemain_id, [Calculated Total].category;
选择[Calculated Total].casemain\u id[Calculated Total]。类别,总和([Calculated Total].Total)作为总和,
IIf([SumOfTotal]=9,“D”,IIf([SumOfTotal]>=6,“C”,IIf([SumOfTotal]>=4,“B”,“C”))作为[建议的案例级别]
从[计算总数]
分组依据[Calculated Total].casemain\u id[Calculated Total].category;

就本质而言,
IIF
计算结果为满足第一个
True
条件。因此,只要分配了
B
,它就不会重新调整重叠条件。理想情况下,考虑互斥条件:

IIf([SumOfTotal <= 3,'A',
   IIF([SumOfTotal] >= 4 AND [SumOfTotal] < 6, 'B',   
        IIf([SumOfTotal] >= 6 AND [SumOfTotal] < 9, 'C',
           IIf([SumOfTotal] >= 9, 'D','C')))) AS [Case Level Suggested]

你在使用什么数据库?通常,除非您正在执行动态SQL,否则文字值用单引号包装。如果您使用的是SQL Server,请看一下(使用单引号,而不是双引号)。我使用的是Microsoft Access添加MSAccess标记,这样您也可以让MS Access群组查看您的问题。那么双引号在Access中是有效的:)太好了,可以了!如果我想将此代码应用到“类别”中,您能否回答?若要将此代码仅应用于“托盘”和“设备”的不同参数,请发布一个新问题,准确解释您的目标和您拥有的内容。
SWITCH([SumOfTotal] <=3,'A',
       [SumOfTotal] >=4 AND [SumOfTotal] < 6, 'B',
       [SumOfTotal] >=6 AND [SumOfTotal] < 9, 'C',
       [SumOfTotal] >=9, 'D',
       True, 'C') AS [Case Level Suggested]