Нам нужно получить родительский код на основе родительского тега из набора результатов, аналогичного приведенному ниже, в одном запросе или одном запросе с подзапросом. Поле TAG добавляется кратным 3 (например, AAA, AAAAAA, AAAAAB и так далее). Таким образом, родительский тег всегда равен длине тега ребенка - 3). Мы подумали, может быть, подзапрос, как показано ниже, но он возвращает NULL для каждой записи.
Select [Level], [Code], [TAG], LEFT([TAG], LEN([TAG]) -3) AS [Parent TAG], [Parent Code] = CASE WHEN [LEVEL] = 1 THEN NULL ELSE (SELECT [CODE] FROM [MyTable] WHERE [TAG] = LEFT([TAG], LEN([TAG]) -3) END)
FROM [MyTable]
Или:
Select [Level], [Code], [TAG], LEFT([TAG], LEN([TAG]) -3) AS [Parent TAG], [Parent Code] = CASE WHEN [LEVEL] = 1 THEN NULL ELSE (SELECT [CODE] FROM [MyTable] WHERE [TAG] = [Parent Tag] END)
FROM [MyTable]
Данные:
|Level|Code |Tag |Parent Tag|Parent Code|
| | | | | |
| 1 |1.0 |AAA | | |
| 2 |1.1 |AAAAAA |AAA | |
| 3 |1.1.1|AAAAAAAAA|AAAAAA | |
| 2 |1.2 |AAAAAB |AAA | |
| 3 |1.1.2|AAAAAAAAB|AAAAAB | |
| 2 |1.3 |AAAAAC |AAA | |
| 3 |1.3.1|AAAAACAAA|AAAAAC | |
Итак, первый Родительский код записи уровня 2 будет 1.0, Родительский код записи 3-го уровня будет 1.1.1 и т. Д. *
Будем благодарны за любые предложения.