【问题标题】:Access SQL 0/1 variable, 3 criteria: 1. Values in column A identical, 2. Value in column B is NOT the largest, and 3. Value in column C IS the largest访问 SQL 0/1 变量,3 个条件:1. A 列中的值相同,2. B 列中的值不是最大的,3. C 列中的值是最大的
【发布时间】:2016-12-18 00:27:50
【问题描述】:

如标题中所述,我需要在 Access 中运行一些 SQL,这为我提供了一个基于三个条件的 0/1 变量。首先,新变量必须比较 A 列中所有相同的值。其次,它必须检查 B 列中的值是否最大(在我的情况下,它一定不是),第三,必须检查 C 列的值是否最大(在我的情况下,它必须)。

通常我会在一行的列上运行一个简单的 IIf 语句,但在这里,我需要它来比较 A 列中所有相同的值,并查看是否存在“非最大”值在 comlum B 中,在 C 列中具有相应的“最大值”。

我们在很多讨论中读到,您需要为此创建一个新查询,但是否可以在查询中执行此操作并在 D 列中获取一个新变量,给出 0/1多变的?

为了清楚起见,我的数据如下所示:

A     B      C
10    4   12-04-2014
10    5   02-17-2015
10    7   08-11-2016
10    8   08-31-2016
10    6   09-05-2016

会有成百上千行,其中 A 与 10 不同。

因此,在这种情况下,只有最后一行会在 D 列中获得值 1,因为它具有最新日期,但对于 A 列中的 ID 值而言,它不是 B 列中的最大值。

非常感谢任何帮助!

  • 马克

【问题讨论】:

  • 简单来说,您希望能够选择 C ​​列中的最大值并将值 1 分配给 D 列中的相应行。对吗?
  • 不完全是。这只是第一个标准。 D中的值1只能得到,如果C中的值最高,则B中的值不是最高的。并且它需要考虑到,它只能比较 B 和 C 中的值,其中 A 中的值跨行相同。
  • 问题是,我需要测量返回给定阶段,这就是为什么 B 列很重要,并且该值不能是该列中的最高值。
  • 那么A列跨行相同?你的意思是,一直都一样?
  • 但是,考虑到可能的 3 步方法,可以使用您的观点。如果您可以在 C 列中为 A 列中的 ID 值指定最高值的情况下在 D 列中分配值 1,然后对 B 列执行相同的操作 - 即,如果 B 列中的值在 E 列中给出值 1是最高的,给定 A 列中的 ID 值。那么您将能够在 F 列中有第三个 0/1 变量,如果 E 列是 0 并且 D 列是 1,hvis 给出值 1。可以这样做吗?

标签: jquery sql ms-access iif


【解决方案1】:
SELECT x.a,x.b,x.c,
  CASE
    WHEN x.b<>(SELECT max(xx.b) FROM yourtable xx WHERE xx.a=x.a)
     AND x.c=(SELECT max(xx.c) FROM yourtable xx WHERE xx.a=x.a)
    THEN 1
    ELSE 0
  END AS d
FROM yourtable x

使用 OVER (PARTITION BY x.a) 会更有效,但 Access 不允许这样做,AFAIK。

【讨论】:

    【解决方案2】:

    在 MySQL 中,您可以这样做:

    select t.*,
           iif(x.b <> (select max(tt.b) from t as tt where tt.a = t.a) and
               x.b = (select max(tt.c) from t as tt where tt.a = t.a), 1, 0
              ) as flag
    from t;
    

    您也可以使用聚合来处理这个问题:

    select t.*,
           iif(tt.maxb <> t.b and tt.maxc = t.c, 1, 0) as flag
    from t inner join
         (select tt.a, max(tt.b) as maxb, max(t.c) as maxc
          from t as tt
          group by tt.a
         ) as tt
         on tt.a = t.a;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-02
      • 2021-11-03
      • 1970-01-01
      • 2014-07-30
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多