1

说我有一个观点,叫vProducts

vProducts从中选择数据tblProducts, tblCategories, tblProductPrices

这 3 个表中的每一个都有一个名为dateUpdatedtype的列DateTime

在我看来,我希望有一个专栏,也称为dateUpdated

这应该是或dateUpdatedtblProducts的最新版本。tblCategoriestblProductPrices

这可能吗?

4

2 回答 2

2

您总是可以只使用一个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价值)

于 2012-08-30T11:28:49.057 回答
0

用于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
于 2012-08-30T11:14:07.667 回答