说我有一个观点,叫vProducts
vProducts
从中选择数据tblProducts, tblCategories, tblProductPrices
这 3 个表中的每一个都有一个名为dateUpdated
type的列DateTime
。
在我看来,我希望有一个专栏,也称为dateUpdated
这应该是或dateUpdated
中tblProducts
的最新版本。tblCategories
tblProductPrices
这可能吗?
说我有一个观点,叫vProducts
vProducts
从中选择数据tblProducts, tblCategories, tblProductPrices
这 3 个表中的每一个都有一个名为dateUpdated
type的列DateTime
。
在我看来,我希望有一个专栏,也称为dateUpdated
这应该是或dateUpdated
中tblProducts
的最新版本。tblCategories
tblProductPrices
这可能吗?
您总是可以只使用一个CASE
语句来确定三个日期中的哪一个是最近的一个:
CREATE VIEW vProducts AS
SELECT
(your list of columns here....),
DateUpdated =
CASE
WHEN p.DateUpdated >= c.DateUpdated AND p.DateUpdated >= pr.DateUpdated
THEN p.DateUpdated
WHEN c.DateUpdated >= p.DateUpdated AND c.DateUpdated >= pr.DateUpdated
THEN c.DateUpdated
WHEN pr.DateUpdated >= c.DateUpdated AND pr.DateUpdated >= p.DateUpdated
THEN pr.DateUpdated
ELSE
'19000101'
END
FROM
dbo.tblProducts p
INNER JOIN
dbo.tblCategories c ON .......
INNER JOIN
dbo.tblProductPrices pr ON .........
三个条件之一应始终适用(否则您将获得19000101
价值)
用于UNION
从三个表中获取所有日期,然后ORDER
它们:
;WITH cte AS
(
SELECT dateUpdated FROM tblProducts
UNION ALL
SELECT dateUpdated FROM tblCategories
UNION ALL
SELECT dateUpdated FROM tblProductPrices
)
SELECT dateUpdated FROM cte
ORDER BY dateUpdated DESC