Вложение IIF и ISNULL для возврата последней записи - PullRequest
0 голосов
/ 08 января 2020

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

Начальный результат Current result after sub-query added

Желаемый результат Desired Result

Идея в том случае, если нет записи об установке или удалении, местоположение будет таким же, как и в последней записи для этого устройства. Снимки экрана выше сделаны до того, как вы попытались это сделать.

SELECT 
    ns.online, 
    n.[node serial number], 
    ns.gateway, 
    ns.[date verified], 
    nls.[location id],
    IIF (ISNULL(nls.[location id]),"null",nls.[location id]) AS [location status],
    nls.[install/remove], 
    nls.[date of action], 
    tbm.[TBM-R], 
    tbm.[TBM-L],
    ns.notes
FROM 
    (
        (nodes AS n INNER JOIN 
        [node status] AS ns ON n.nodeid = ns.[node serial]) LEFT JOIN 
        [node location status] AS nls ON (ns.[node serial] = nls.[node serial number]) AND 
        (ns.[date verified] = nls.[date of action])) LEFT JOIN 
        [TBM Station] AS tbm ON ns.[Date Verified] = tbm.[Date Reported]
WHERE 
    n.[node serial number]=[Enter node serial number]
ORDER BY 
    [date verified] DESC

Текущий результат enter image description here

Итак, как вы можете видеть Мне удалось вставить «пустое» значение в пустую ячейку, что является шагом вперед, но я застрял, пытаясь выяснить, как заставить его вместо этого отображать последний записанный идентификатор местоположения.

12 и 13 относятся к идентификатору записи правильного идентификатора местоположения в таблице местоположений (на которую нет прямой ссылки в запросе, но на которую указывает таблица [node location status] через раскрывающийся список). Я не уверен, почему это происходит, и к этому нужно будет обратиться, но по крайней мере я вижу пустую ячейку, заполненную в этот момент.

1 Ответ

0 голосов
/ 17 января 2020

Мне удалось решить эту проблему путем реструктуризации моих данных, чтобы сделать их подключение намного проще. Я понял, что [Node Location Status] и [Node Status] не должны разделять таблицы. После этого следующий запрос смог отобразить статус местоположения так, как я этого хотел.

    [Node Status].Online, 
    [Node Status].[Not in Service], 
    Nodes.[Node Serial Number], 
    [Node Status].Gateway, 
    [Gateway Status].Online, 
    [Node Status].[Location Status], 
    [Node Status].[Install/Remove], 
    [Node Status].[Date Verified], 
    [TBM Station].[TBM-L], 
    ([TBM Station].[TBM-L])-(Locations.Station) AS [TBM L], 
    ([TBM Station].[TBM-R])-(Locations.Station) AS [TBM R], 
    [Node Status].Notes
FROM 
    Locations RIGHT JOIN 
    (((Nodes INNER JOIN [Node Status] ON Nodes.NodeID = [Node Status].[Node Serial]) INNER JOIN 
    [TBM Station] ON [Node Status].[Date Verified] = [TBM Station].[Date Reported]) LEFT JOIN 
    [Gateway Status] ON [Node Status].[Date Verified] = [Gateway Status].Updated) ON Locations.LocationID = [Node Status].[Location Status]
WHERE 
    (((Nodes.[Node Serial Number])=[Enter node serial number]))
ORDER BY 
    [Node Status].[Date Verified] DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...