Я пытаюсь написать SQL Запрос к таблице в MSAccess, чтобы добавить виртуальный столбец, который будет добавлять последовательные буквы алфавита на основе столбца значения, отсортированного в порядке убывания.
------------------------------------------------
| Filename | Zone | ValueCol |
------------------------------------------------
| abc | Zone_MEA | 33 |
| abc | Zone_DEA | 29 |
| abc | Zone_SEO | 21 |
| abc | Zone_GUY | 09 |
|-----------------------------------------------
| def | Zone_SEO | 30 |
| def | Zone_DEA | 22 |
| def | Zone_MEA | 07 |
| def | Zone_GUY | 06 |
|----------------------------------------------|
| ghi | Zone_GUY | 21 |
| ghi | Zone_MEA | 12 |
| ghi | Zone_SEO | 04 |
| ghi | Zone_DEA | 04 |
------------------------------------------------
Таким образом, все значения в ValueCol
, отсортированные в descending order
, получат последовательные буквы, начинающиеся с буквы A для набора зон.
Virtual Col
---------------------------------------------------------------
| Filename | Zone | ValueCol | Letter |
---------------------------------------------------------------
| abc | Zone_MEA | 33 | A |
| abc | Zone_DEA | 29 | B |
| abc | Zone_SEO | 21 | C |
| abc | Zone_GUY | 09 | D |
|-------------------------------------------------------------|
| def | Zone_SEO | 30 | A |
| def | Zone_DEA | 22 | B |
| def | Zone_MEA | 07 | C |
| def | Zone_GUY | 06 | D |
|-------------------------------------------------------------|
| ghi | Zone_GUY | 21 | A |
| ghi | Zone_MEA | 12 | B |
| ghi | Zone_SEO | 04 | C |
| ghi | Zone_DEA | 04 | D |
---------------------------------------------------------------
Есть ли способ написать такой SQL запрос в MSAccess, не прибегая к созданию каких-либо физических вспомогательных таблиц? (Исключением может быть виртуальная вспомогательная таблица, но не знаете, как ее создать или как ее можно использовать.)
РЕДАКТИРОВАТЬ: Каждый раздел представляет собой одно конкретное имя файла.
Написал этот запрос по предложениям от @Erik A. Вот запрос:
SELECT M.FILENAME, M.ZONE,M.[VALUECOL],
CHR(64 + (
SELECT COUNT(*)
FROM tblTest AS S
WHERE
S.[FILENAME] = M.[FILENAME]
AND S.[ZONE] <= M.[ZONE]
AND S.[VALUECOL] <= M.[VALUECOL]
AND S.[FILENAME]&S.[ZONE]&S.[VALUECOL]<=M.[FILENAME]&M.[ZONE]&M.[VALUECOL]
) ) AS POS
FROM tblTest AS M
GROUP BY M.[FILENAME], M.[ZONE], M.[VALUECOL]
ORDER BY M.[FILENAME] ASC, M.[VALUECOL] DESC,M.[ZONE] ASC
- Алфавитный порядок по-прежнему не последовательный, как это видно из приведенных ниже выходных данных.
- Также получаются повторяющиеся буквы в определенном разделе FILENAME.
![enter image description here](https://i.stack.imgur.com/7n65S.png)
Редактировать ... еще раз: Это занимает точку 2, т.е. дубликаты, но не точку 1.
SELECT M.FILENAME, M.ZONE,M.[VALUECOL],
CHR(64 + (
SELECT COUNT(*)
FROM tblTest AS S
WHERE
S.[FILENAME] = M.[FILENAME]
AND S.[FILENAME]&S.[ZONE] <= M.[FILENAME]&M.[ZONE]
AND S.[FILENAME]&S.[ZONE]&S.[VALUECOL]<=M.[FILENAME]&M.[ZONE]&M.[VALUECOL]
) ) AS POS
FROM tblTest AS M
GROUP BY M.[FILENAME], M.[ZONE], M.[VALUECOL]
ORDER BY M.[FILENAME] ASC, M.[VALUECOL] DESC,M.[ZONE] ASC
![enter image description here](https://i.stack.imgur.com/QM11N.png)