SELECT ID,
CASE
WHEN Date1>Date2 AND Date1>Date3 THEN Date1
WHEN Date2>Date1 AND Date2>Date3 THEN Date2
ELSE Date3
END AS "Most Recent Date",
CASE
WHEN Date1>Date2 AND Date1>Date3 THEN Cost1
WHEN Date2>Date1 AND Date2>Date3 THEN Cost2
ELSE Cost3
END AS Cost
FROM TableName;
‘Date1’...‘Date2’...‘Date3’是一种模式气味。考虑规范化为单独的多对一表。
预计到达时间:
TableName中Cost1、Cost2、Cost3为空的情况。
你也有空值吗?好吧,这变得非常不愉快。您需要防止空值,例如:
CASE
WHEN Date1>COALESCE(Date2, 0) AND Date1>COALESCE(Date3, 0) THEN Date1
WHEN Date2>COALESCE(Date1, 0) AND Date2>COALESCE(Date3, 0) THEN Date2
ELSE Date3
END AS "Most Recent Date",
(在日期选择位和成本选择位中。假设成本通常总是高于 0。)
我需要使用另一个表:BackupTableName [ID, Date1, Cost1, Date2, Cost2, Date3, Cost3] 并使用它的数据
嗯...这是可能的,但您的模型现在看起来非常不稳定。
SELECT t0.ID,
CASE
WHEN t0.Date1>COALESCE(t0.Date2, 0) AND t0.Date1>COALESCE(t0.Date3, 0) THEN t0.Date1
WHEN t0.Date2>COALESCE(t0.Date1, 0) AND t0.Date2>COALESCE(t0.Date3, 0) THEN t0.Date2
WHEN t0.Date3>COALESCE(t0.Date1, 0) AND t0.Date3>COALESCE(t0.Date1, 0) THEN t0.Date3
WHEN t1.Date1>COALESCE(t1.Date2, 0) AND t1.Date1>COALESCE(t1.Date3, 0) THEN t1.Date1
WHEN t1.Date2>COALESCE(t1.Date1, 0) AND t1.Date2>COALESCE(t1.Date3, 0) THEN t1.Date2
WHEN t1.Date3>COALESCE(t1.Date1, 0) AND t1.Date3>COALESCE(t1.Date1, 0) THEN t1.Date3
END AS "Most Recent Date",
-- the same thing all over again for the cost selector
FROM TableName AS t0
LEFT JOIN BackupTableName AS t1 ON t0.ID=t1.ID;
如果在你的能力范围内,你需要normalise这些表,因为你现在拥有的数据模型基本上已经被破坏了。