Заменить значения в столбце массива связанными значениями из другой таблицы

Вы не используете подарки, которые дает вам Workbook_SheetActivate. Sh - объект рабочего листа, который активируется.

Ваше объявление переменной является henky; вы объявляете Dim MySheets As String, но никогда не используете его и не назначаете MySheet = «Sheet1» и MySheet2 = «Sheet2», не объявляя их.

Некоторые уровни идентификации листа лучше обрабатываются с помощью свойства кодового файла , который изменяется гораздо реже.

Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim response As String

    If IsError(Application.Match(Sh.CodeName, Array("Sheet1", "Sheet2"), 0)) Then
        Sh.Visible = xlSheetHidden

        response = InputBox("Enter password to view sheet")
        If response = "MyPass" Then
            Application.EnableEvents = False
            Sh.Visible = xlSheetVisible
            Sh.Activate
            Application.EnableEvents = True
        End If
    End If

    Sheet1.Visible = True
    Sheet2.Visible = True

End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    If IsError(Application.Match(Sh.CodeName, Array("Sheet1", "Sheet2"), 0)) Then
        Sh.Visible = xlSheetHidden
    End If

End Sub

1
задан Erwin Brandstetter 18 January 2019 в 20:02
поделиться

2 ответа

Предполагая, что вы хотите сохранить порядок в массиве - имена перечислены в том же порядке, что и идентификаторы в оригинале relation_ids.

Я предлагаю конструктор ARRAY поверх коррелированного подзапроса с unnest() и WITH ORDINALITY, присоединенного к таблице names, например:

SELECT r.*
    , (ARRAY (
         SELECT n.first_name
         FROM   unnest(r.relation_ids) WITH ORDINALITY AS a(user_id, ord)
         JOIN   names n ON n.user_id = a.user_id
         ORDER  BY a.ord
         )
       ) AS first_names
FROM   relations r;

Этот запрос сохраняет [ 1116] все строк из relations в любом случае.

Угловые случаи, на которые следует обратить внимание:
1. Значение NULL в relation_ids (для всего столбца) переводится в пустой массив. (Аналогично пустому массиву в источнике.)
2. NULL элементы молча удаляются из массива.

Возможно, вы захотите определить желаемое поведение, если эти угловые случаи возможны ...

db <> fiddle здесь

Связанные:

Рассматривается нормализованный дизайн БД:

0
ответ дан Erwin Brandstetter 18 January 2019 в 20:02
поделиться

Это вернет вам все столбцы и строки из отношений с именем, добавленным в таблицу имен.

Select Relations.relation_ids, Names.user_id, Names.first_name From Relations
Inner Join Names On Relations.user_id=Names.user_id
0
ответ дан MapinTX 18 January 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: