首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试编写一些access SQL来查询报告并计算优先级

我正在尝试编写一些access SQL来查询报告并计算优先级
EN

Stack Overflow用户
提问于 2020-02-09 20:26:20
回答 2查看 50关注 0票数 0

我是新手,所以请耐心等待,我正在尝试编写一些访问SQL,它将查询报告并计算优先级,

每一行都有设备编号、优先级和日期。

我想要计算的是,对于优先级为“Q”且最早日期为1的每个设备编号,优先级为“Q”= 2的下一个相同设备编号,以及优先级为“Q”=3的下一个相同设备编号,每次有新的设备编号时,计数将从我尝试过的1个SQL重新开始

代码语言:javascript
复制
SELECT SERVICES.*, (SELECT COUNT([PRIORITY]) FROM SVC WHERE SERVICES.ID=ID) And [SERVICES].[PRIORITY]="Q" AS Count1
FROM SVC AS SERVICES
ORDER BY SERVICES.ID;

此代码生成和-1

EN

回答 2

Stack Overflow用户

发布于 2020-02-09 20:48:59

您的查询未考虑PLANDATE_MAINTCALL

代码语言:javascript
复制
SELECT S.*,
       (SELECT COUNT(*)
        FROM SVC as S2
        WHERE S2.EQUIPEMENT = s.EQUIPMENT AND
              S2.PLANDATE_MAINTCALL <= S.PLANDATE_MAINTCALL AND
              S2.[PRIORITY] = "Q"
       ) AS Count1
FROM SVC AS S
ORDER BY S.ID;
票数 2
EN

Stack Overflow用户

发布于 2020-02-09 20:51:17

此表达式:

代码语言:javascript
复制
(SELECT COUNT([PRIORITY]) FROM SVC WHERE SERVICES.ID=ID) And [SERVICES].[PRIORITY]="Q"

包含2个操作数。

第一个是:

代码语言:javascript
复制
(SELECT COUNT([PRIORITY]) FROM SVC WHERE SERVICES.ID=ID)

它返回一个整数,第二个是:

代码语言:javascript
复制
[SERVICES].[PRIORITY]="Q"

它是布尔值,对于True返回-1,对于False返回0

因此,您要做的是对这些表达式的结果应用运算符AND,最终结果是一个布尔值:对于True-1,对于False0

我怀疑你想要的是:

代码语言:javascript
复制
SELECT SERVICES.*, 
  (SELECT COUNT([PRIORITY]) FROM SVC WHERE SERVICES.ID=ID) AS Count1
WHERE [SERVICES].[PRIORITY]="Q" 
FROM SVC AS SERVICES
ORDER BY SERVICES.ID;

或者:

代码语言:javascript
复制
SELECT SERVICES.*, 
  (SELECT COUNT([PRIORITY]) FROM SVC WHERE SERVICES.ID=ID AND [SERVICES].[PRIORITY]="Q") AS Count1
FROM SVC AS SERVICES
ORDER BY SERVICES.ID;

虽然没有样本数据,但很难判断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60136595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档