我想获得Type,Label1 Label2和NUM
when Type from TABLE1 = Type Table 2
AND if type from Table1 = x i want Label1 from table1 = Label from Table2
If type from table1 = Y I want LAbl~el2 from table1 = Label from table2
例如: 如果Table1在名为Label的collunm中将Lable1和Lable2放在一起,我会这样做:
SELECT t1.type, t1.Label, t2.NUM
FROM Table1 t1
Table2 t2
WHERE t1.type = t2.typ2 and
t1.LABEL = t2. LABEL
但在我的场景中,我在表1中有两个标签。标签1表示X型,标签2表示Y型。
那么优雅高效的方式(假设表中有很多数据)是什么:
select the data t1.Type, t1.Label1 t1.Label2 and t2.NUM when:
t1.type = t2.type2
and If t1.type = 'X' -> t1.Label1 = t2.Label
and If t1.type = 'Y' -> t1.label2 = t2.Label?
这应该是我想做的选择的结果:
答案 0 :(得分:1)
根据条件加入。 (我假设空白值为空)..
SELECT t1.type, t1.Label1, t1.Label2, t2.NUM
FROM Table1 t1,
Table2 t2
WHERE t1.type = t2.type and
Isnull(t1.LABEL1,t1.LABEL2) = t2. LABEL
答案 1 :(得分:1)
正如Abdul建议的那样,根据label1
的值,根据label2
或type
加入;您可以使用case
语句来执行此操作:
SELECT t1.type, t1.label1, t1.label2, t2.num
FROM table1 t1
JOIN table2 t2
ON t2.type = t1.type
AND t2.label = CASE WHEN t1.type = 'X' THEN t1.label1 ELSE t1.label2 END;
T LABEL1 LABEL2 NUM
- ------ ------ ----------
X DOC 1000
X INV 2000
Y VAL 3000
您也可以在此处使用decode
,但case
更通用。这实际上为您提供了一个虚拟组合列来加入,您可以通过查看table1添加该案例表达式来实现可视化:
SELECT t1.type, t1.label1, t1.label2,
CASE WHEN t1.type = 'X' THEN t1.label1 ELSE t1.label2 END AS label
FROM table1 t1;
T LABEL1 LABEL2 LABEL
- ------ ------ -----
X DOC DOC
X INV INV
X MAT MAT
Y VAL VAL
Y VIE VIE
Y TRU TRU
如果您确定只填充了一个标签列,哪一个总是依赖于该标志,您还可以使用coalesce
来获取要加入的值:
SELECT t1.type, t1.label1, t1.label2, t2.num
FROM table1 t1
JOIN table2 t2
ON t2.type = t1.type
AND t2.label = COALESCE(t1.label1, t1.label2);
使用获得相同结果的样本数据。但是案例方法可能更安全,以防两个列都被填充。