Второй по величине столбец - PullRequest
       0

Второй по величине столбец

0 голосов
/ 07 сентября 2018

Я видел похожий вопрос Как получить второе по величине значение среди нескольких столбцов в SQL ... однако решение не будет работать для Microsoft Access (Row_Number / Over Partition недопустима в Access).

Запрос My Access включает в себя десятки полей. Я хотел бы создать новое поле / столбец, который будет возвращать второе по величине значение из 10 конкретных столбцов, которые включены в запрос, я назову это поле «Обложка». Как то так:

    Product  Bid1    Bid2   Bid3   Bid4  Cover
    Watch    104     120    115    108   115
    Shoe     65      78     79     76    18
    Hat      20      22     19     20    20

Я могу сделать очень длинную SWITCH формулу, например следующую эквивалентную формулу Excel:

IF( AND(Bid1> Bid2, Bid1 > Bid3, Bid1 > Bid4), Bid1, 
    AND(Bid2> Bid1, Bid2 > Bid3, Bid2 > Bid4), Bid2,
    .....

Но должно быть более эффективное решение. Эквивалент MAXIF будет отлично работать, если у MS-Access Query есть такая функция.

Есть идеи? Заранее спасибо.

1 Ответ

0 голосов
/ 08 сентября 2018

Это было бы проще, если бы данные были выложены более нормализованным способом . Подсказка - это пронумерованные имена полей.

Ваши данные в настоящее время организованы как Сводная (известная в Access как кросс-таблица ), но может легко быть Unpivoted .

С этими данными гораздо проще работать, если их более нормализовать , что в этом случае будет:

  Product   Bid   Amount  
 --------- ----- -------- 
  Watch       1      104  
  Watch       2      120  
  Watch       3      115  
  Watch       4      108  
  Shoe        1       65  
  Shoe        2       78  
  Shoe        3       79  
  Shoe        4       76  
  Hat         1       20  
  Hat         2       22  
  Hat         3       19  
  Hat         4       20  

Таким образом, запросы становятся проще.

Похоже, вы хотите максимум ставок, сгруппированных по продукту , поэтому:

select Product, max(amount) as maxAmount
from myTable 
group by product

Действительно, нам вообще не следует хранить текстовые поля, поэтому Product должен представлять собой идентификационный номер с соответствующими именами продуктов, которые хранятся один раз в отдельной таблице вместо несколько раз в этом, как:

  ProdID   ProdName  
 -------- ---------- 
    1       Watch     
    2       Shoe      
    3       Hat       

... но это еще один урок.

Вообще говоря, повторять что-либо следует избегать ... это в значительной степени цель базы данных ... но ссылки ниже объяснят, чем я: :)


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...