我想要做一個視圖來使用RadGrid控件在網頁上引用。我需要使用狀態表中的狀態以及項目的詳細信息,通過每個唯一項目的更改表中最後輸入的Changedate獲取項目表中所有記錄的子集以及項目的詳細信息。 ProjectId & StatusID作爲外鍵位於Changes表中。如何在視圖中使用函數僅返回不同的行聯合?
這是我的看法。
CREATE VIEW [dbo].[Project-by_View]
AS
SELECT TOP (100) PERCENT
dbo.Projects.Id,
dbo.Projects.ProjectName,
dbo.Department.Name,
dbo.Designer.FName + ' ' + dbo.Designer.LName AS Designer,
dbo.Changes.ChangeDate,
dbo.Projects.DueDate,
dbo.Projects.Instructions,
dbo.Status.Description
FROM dbo.Projects
INNER JOIN dbo.Department
ON dbo.Department.ID = dbo.Projects.DeptID
INNER JOIN dbo.Designer
ON dbo.Designer.Id = dbo.Projects.DesignerID
INNER JOIN dbo.Changes
ON dbo.Changes.ProjectID = dbo.Projects.ID
INNER JOIN dbo.Status
ON dbo.Changes.StatusID = dbo.Status.Id
WHERE EXIST (SELECT *
FROM GetAllLastChangeDatebyProjectIds(0))
ORDER BY dbo.Projects.ID DESC
GO
和我的功能
USE [FIDO_DEV]
GO
/****** Object: UserDefinedFunction [dbo].[GetAllLastChangeDatebyProjectIds]
Script Date: 9/14/2015 4:31:22 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author, Geoffrey Stephens>
-- Create date: <Create Date, 09/14/20115>
-- Description: <Description, table of the Last Change Date for each Project>
-- =============================================
ALTER FUNCTION [dbo].[GetAllLastChangeDatebyProjectIds]
(
@ProjectID int
)
RETURNS TABLE
AS
RETURN
(
Select ProjectID, StatusID, ChangeDate from (
Select
ProjectID, StatusID, ChangeDate,
row_number() over(partition by ProjectID order by ChangeDate desc) as rn
from
Changes
) t
where t.rn = 1)
GO
功能的工作原理和工作觀分開,但結合我仍然得到完整的數據集返回。
我沒有將一個Project.ID傳遞給該函數,所以錯誤說不能綁定。我想,也許我需要從函數返回數據集開始,然後做我的加入,b – glstephens08
除非您在視圖中使用TOP或其他內容,否則排序不起作用。 – glstephens08
你不應該真的在視圖中使用ORDER BY。根據我對事物的理解,在外面進行排序被認爲是更好的做法。即,SELECT * FROM SomeView ORDER BY SomeColulmn ASC – user5151179