У меня есть несколько видов и таблиц, которые я пытаюсь подключить в одном представлении, чтобы создать графический интерфейс для нескольких пользователей (и меня). Это в основном система инвентаризации, которая связывает информацию о покупке, которая была сброшена в таблицу SQL + внутренний тег актива + доступ пользователя. Столы похожи на:SQL Server 2008 R2 просмотр помощи
- активы - Серийный номер, ID
- UserAudit - UserName, AssetsID, OfficeID, дата/время
- Офис - место
- Заказы - серийный номер, подробно
Некоторые из активов - это компьютеры, а UserAudit заполняется сценарием входа в систему, который записывает имя пользователя, имя компьютера и дату/время. Я пытаюсь создать представление, которое связывает всю информацию, основанную на списке Активы, независимо от того, имеют ли соответствующие таблицы соответствующие данные. Для стороны UserAudit я просто хочу отобразить самую последнюю запись (поле даты Desc).
Место, где я столкнулся с проблемой, захватывает только верхнюю запись из UserAudit на основе ComputerName, все еще возвращая все столбцы из других. Я попытался создать отдельное представление для UserAudit с показом «Top 1» - однако это ограничило основной вид только одним результатом, если я использую «внутреннюю связь» и ничего не отображаю из UserAUdit при использовании любого соединения OUTER ,
Я провел некоторое исследование, в котором приложение Cross Apply выглядит так, как будто оно может быть релевантным, однако я не использовал это раньше, и попытки не сработали. Вид в настоящее время выглядит так:
SELECT TOP (100) PERCENT
dbo.AssetType.AssetType, dbo.AssetTagInventory.ID, dbo.AssetTagInventory.AssetDetail,
dbo.AssetTagInventory.Name, dbo.AssetTagInventory.Serial, dbo.AssetTagInventory.UserID,
dbo.AssetTagInventory.Age, dbo.AssetTagInventory.Notes,
dbo.vewOffices.Name AS OfficeName,
dbo.AssetTagPurchases.PurchaseDate, dbo.AssetTagPurchases.ProductDescription AS Model,
dbo.AssetTagPurchases.ID AS AECOrderNumber,
dbo.AssetTagPurchases.Vendor, dbo.AssetTagPurchases.QuotedPrice,
dbo.AssetTagPurchases.InvoicedPrice, dbo.AssetTagPurchases.InvoiceNum,
dbo.AssetTagPurchases.VendorOrderNumber, dbo.vewLogonAudit.Username,
dbo.vewLogonAudit.LoginTime
FROM
dbo.AssetTagInventory
INNER JOIN
dbo.vewLogonAudit ON dbo.AssetTagInventory.Name = dbo.vewLogonAudit.ComputerName
LEFT OUTER JOIN
dbo.AssetType ON dbo.AssetTagInventory.AssetTypeID = dbo.AssetType.ID
LEFT OUTER JOIN
dbo.vewOffices ON dbo.AssetTagInventory.OfficeID = dbo.vewOffices.ID
LEFT OUTER JOIN
dbo.AssetTagPurchases ON dbo.AssetTagInventory.Serial = dbo.AssetTagPurchases.Serial
Используйте вложенный подзапрос, чтобы выбрать только верхнюю 1 запись UserAudit и присоединиться к ней. Кроме того, запись ваших ключевых слов в конце строки, а не начало, делает очень неприятным прочитать ваш запрос. –