我有一个问题:
select TABLE.NAME,
max(case when TABLE_ADDITION.CODE= 1 then TABLE_ADDITION.VALUE end) Mach1,
max(case when TABLE_ADDITION.CODE= 4 then TABLE_ADDITION.VALUE end) Source,
max(case when TABLE_ADDITION.CODE= 6 then TABLE_ADDITION.VALUE end) Dest,
max(case when TABLE_ADDITION.CODE= 16 then TABLE_ADDITION.VALUE end) Mach2
FROM TABLE
这是有效的,结果是:
NAME Mach1 Source Dest Mach2
test 11 testS testD 12
我需要来自另一个表(MACH)的其他信息。列Mach1和mach2是ID。我想使用此ID从正确的表MACH中取名(请参阅下面的数据 - 帖子的结尾)。
我希望:
NAME Mach1 Source Dest Mach2
test machName11 testS testD machName12
为此,我做了:
select TABLE.NAME,
max(case when TABLE_ADDITION.CODE= 1 then MACH.MACHNAME end) Mach1,
max(case when TABLE_ADDITION.CODE= 4 then TABLE_ADDITION.VALUE end) Source,
max(case when TABLE_ADDITION.CODE= 6 then TABLE_ADDITION.VALUE end) Dest,
max(case when TABLE_ADDITION.CODE= 16 then MACH.MACHNAME end) Mach2
FROM TABLE
INNER JOIN TABLE_ADDITION ON TABLE.TABLEID = TABLE_ADDITION.TABLEID AND TABLE.NAME = TABLE_ADDITION.NAME
INNER JOIN MACH ON TABLE_ADDITION.CODE IN (1, 16) AND TABLE_ADDITION .VALUE = MACH.MACHID
但是,我没有收到预期的行为:
NAME Mach1 Source Dest Mach2
test machName11 NULL NULL machName12
我尝试过LEFT JOIN和INNER JOIN。
TABLE_ADDITION的数据:
TABLEID NAME CODE VALUE
1 test 1 11
1 test 4 testS
1 test 6 testD
1 test 16 12
1 test 20 value11
1 test 25 45
1 test ... [continue with a lot of ID and VALUE are int or varchar]
2 test2 1 45
2 test2 4 testSource\test
2 test2 6 testDest\test
2 test2 16 1
2 test2 20 value
2 test2 25 76
[continue for other ID]
对于MACH
MACHID MACHNAME MACHTYPE
0 test 0
3 test1 1
10 test3 2
11 machName11 2
12 machName12 2
[continue with other ID]
For TABLE
TABLEID NAME TABLETYPE
1 test 12
1 test3 12
2 name 5
[continue with other ID]
我需要TABLE,因为它是我的主表(带有其他列),我选择其中一些没有问题。
编辑,我编辑我的帖子,这是错误的,缺少太多的数据来理解我的问题。现在它正在运行,因为我添加了一个联接:
select TABLE.NAME,
max(case when t2.CODE= 1 then MACH.MACHNAME end) Mach1,
max(case when TABLE_ADDITION.CODE= 4 then TABLE_ADDITION.VALUE end) Source,
max(case when TABLE_ADDITION.CODE= 6 then TABLE_ADDITION.VALUE end) Dest,
max(case when t2.CODE= 16 then MACH.MACHNAME end) Mach2
FROM TABLE
INNER JOIN TABLE_ADDITION ON TABLE.TABLEID = TABLE_ADDITION.TABLEID AND TABLE.NAME = TABLE_ADDITION.NAME
INNER JOIN TABLE_ADDITION t2 ON TABLE.TABLEID = t2 .TABLEID AND TABLE.NAME = t2 .NAME
INNER JOIN MACH ON t2 .CODE IN (1, 16) AND t2 .VALUE = MACH.MACHID
由于