SQL风格是Mode的独特变体,也就是说SQL风格并不重要。如果你能告诉我如何在一种SQL中做到这一点,我至少知道在这种变体中该怎么用谷歌来弄清楚。
我正在连接两个表,并试图识别列,其中一个项目的状态是相同的,但是状态在两个表之间写的不同。
表1列:
<<ul>表2列:
- 状态(未分配、不可用、退役)
Available = unassigned, unavailable = unavailable, inactive = retired.
我试图首先比较可用/未分配的队列,非活动/退役队列等。然后我试图只返回两个状态列不匹配的结果,但由于它们使用不同的单词来表示相同的想法,我只是不知道如何做到这一点。
我只需将状态值重新编码为WHERE子句中的数字代码,如下所示
SELECT t1.*,t2.Status FROM t1
LEFT JOIN t2 ON t1.Number = t2.Number
WHERE CASE WHEN t1.Status = 'available' THEN 1
WHEN t1.Status = 'unavailable' THEN 2
WHEN t1.Status = 'inactive' THEN 3
END != CASE WHEN t2.Status = 'unassigned' THEN 1
WHEN t2.Status = 'unavailable' THEN 2
WHEN t2.Status = 'retired' THEN 3
END
http://sqlfiddle.com/!9/39f243/2
您可以使用如下内容:
; With StatusMapping AS
(
SElect 'Available' T1Status , 'Unassigned' T2Status
UNION
SELECT 'Unavailable', 'Unavailable'
UNION
SELECT 'Inactive', 'Retired'
)
SELECT *
FROM T1
INNER JOIN StatusMapping M ON M.T1Status = T1.Status
INNER JOIN T2
ON T1.Number = T2.Number
AND T2.Status = M.T2Status