首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于计数结果和条件更新的Access SQL更新

基于计数结果和条件更新的Access SQL更新
EN

Stack Overflow用户
提问于 2012-08-15 04:33:04
回答 1查看 577关注 0票数 0

昨天,我得到了关于这条SQL语句的帮助,它工作得非常棒……现在,我正尝试使用该查询中的数据来更新另一个表上的两列。

下面是我得到的查询:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT x.TechID,
       Count(*) AS cnt,
       tblEmployeeData.LName,
       tblEmployeeData.Pernr,
       tblEmployeeData.Occurrences,
       tblEmployeeData.Standing
FROM   tblEmployeeData
       INNER JOIN tblOccurrence AS x
         ON tblEmployeeData.TechID = x.TechID
WHERE  ( ( ( x.OccurrenceDate ) BETWEEN Dateadd("m", -6, Date()) AND Date() )
         AND ( ( EXISTS (SELECT *
                         FROM   tblOccurrence AS y
                         WHERE  y.TechID = x.TechID
                                AND Dateadd ("d", -1, x.[OccurrenceDate]) = y.[OccurrenceDate]) ) = False ) )
GROUP  BY x.TechID,
          tblEmployeeData.LName,
          tblEmployeeData.Pernr;

我想要做的是获取结果并更新tblEmployeeData两列。其中一列(tblEmployeeData.Occorrences)将是由'cnt‘表示的值...然后最难的部分..。将使用'cnt‘中的值更新列tblEmployeeData.Standing,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
0-3 = "Good"
4-5 = "Verbal Warning"
6-7 = "Written Warning"
8 = "Final Written Warning"
9+ = "Termination" 

它已经是一个很大的SQL语句了,这让我摸不着头脑!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-15 04:46:03

您可以将一个查询包装在另一个查询中:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT TechID, Rank FROM Rank,
(SELECT x.TechID, Count(*) AS cnt, tblEmployeeData.LName, 
    tblEmployeeData.Pernr, tblEmployeeData.Occurrences, tblEmployeeData.Standing
FROM tblEmployeeData
INNER JOIN tblOccurrence AS x ON tblEmployeeData.TechID = x.TechID
WHERE (((x.OccurrenceDate) Between DateAdd("m",-6,Date()) And Date())
  AND ((Exists     
    (SELECT * FROM tblOccurrence AS y  WHERE y.TechID = x.TechID AND DATEADD 
    ("d", -1, x.[OccurrenceDate]) = y.[OccurrenceDate]))=False))
GROUP BY x.TechID, tblEmployeeData.LName, tblEmployeeData.Pernr) a
WHERE a.Cnt BETWEEN Rank.Low And rank.High

其思想是将查询与Rank表一起使用,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
Low High    Rank
0   3       Good
4   5       Verbal Warning
6   7       Written Warning
8   8       Final Written Warning
9   99      Termination

编辑重新注释

这为我在一个粗略的模型中运行

代码语言:javascript
代码运行次数:0
运行
复制
SELECT a.TechID, tblRank.Rank FROM tblRank, (SELECT x.TechID, Count(*) AS cnt, tblEmployeeData.LName, 
    tblEmployeeData.Pernr, tblEmployeeData.Occurrences, tblEmployeeData.Standing
FROM tblEmployeeData
INNER JOIN tblOccurrence AS x ON tblEmployeeData.TechID = x.TechID
WHERE (((x.OccurrenceDate) Between DateAdd("m",-6,Date()) And Date()) AND ((Exists     
    (SELECT * FROM tblOccurrence AS y  WHERE y.TechID = x.TechID AND DATEADD 
    ("d", -1, x.[OccurrenceDate]) = y.[OccurrenceDate]))=False))
GROUP BY x.TechID, tblEmployeeData.LName, tblEmployeeData.Pernr, tblEmployeeData.Occurrences, tblEmployeeData.Standing) a
WHERE a.Cnt BETWEEN tblRank.Low And tblrank.High
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11960289

复制
相关文章

相似问题

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