日期:2014-05-18  浏览次数:20371 次

一个很难的问题,如下SQL
SELECT     LotNM,   HistoryMainLineId,  
            CASE   TxnDate   WHEN   '1900-01-01   00:00:00.000 '   THEN   getdate()  
            ELSE   txndate   END   AS   Expr1,   TxnId,   WorkflowStepNM
FROM   (SELECT   t   .LotNM,   t   .HistoryMainLineId,   t   .TxnDate,   t   .TxnId,  
                            t   .WorkflowStepNM
                FROM   dbo.UNIT_Shipped   t
                UNION   ALL
                SELECT   k.LotNM,   k.HistoryMainLineId,   k.TxnDate,   k.TxnId,   k.WorkflowStepNM
                FROM   dbo.UNIT_mainline   k
                UNION   ALL
                SELECT   x.lotnm,   x.historymainlineid,   x.txndate,   x.txnid,   x.workflowstepnm
                FROM   dbo.unit_dpshipped   x)   a
ORDER   BY   TxnDate
上面的视图中当第一行为空时,因为拿不到日期就变成1900年,我本意是如果这行为1900年的话,就拿最后一行的时间.即拿k.txndate但怎么拿都拿不到.因为是从三个视图的联合得来的反映到一个视图里来
thanks

------解决方案--------------------
SELECT a.LotNM, a.HistoryMainLineId,
CASE WHEN a.TxnDate = '1900-01-01 00:00:00.000 ' THEN b.TxnDate
ELSE a.txndate END AS Expr1, TxnId, WorkflowStepNM
FROM (SELECT t .LotNM, t .HistoryMainLineId, t .TxnDate, t .TxnId,
t .WorkflowStepNM
FROM dbo.UNIT_Shipped t
UNION ALL
SELECT k.LotNM, k.HistoryMainLineId, k.TxnDate, k.TxnId, k.WorkflowStepNM
FROM dbo.UNIT_mainline k
UNION ALL
SELECT x.lotnm, x.historymainlineid, x.txndate, x.txnid, x.workflowstepnm
FROM dbo.unit_dpshipped x) a inner join dbo.UNIT_mainline b on a.lotnm=b.lotnm order by a.TxnDate