【发布时间】:2016-09-07 07:41:58
【问题描述】:
我正在使用 Oracle,我的主要目标是显示来自 table b (Field1) 的列的唯一值,但我仍然需要显示来自其他表的其他列。
SELECT A.FIELD1, MAX(B.FIELD1) AS "UNIQUE", B.FIELD2, B.FIELD3, C.FIELD3, D.FIELD4
FROM A
INNER JOIN B ON B.FIELD4 = A.FIELD1
INNER JOIN C ON C.FIELD2 = B.FIELD1
INNER JOIN D ON D.FIELD3 = C.FIELD3
GROUP BY A.FIELD1, B.FIELD1, B.FIELD2, B.FIELD3, C.FIELD3, D.FIELD4
ORDER BY A.FIELD1, D.FIELD4 ASC
数据结构是
A
FIELD1 FIELD2 FIELD3 FIELD4
ABC DEF HIJ KLM
B
FIELD1 FIELD2 FIELD3 FIELD4
000 1X1 24D ABC
000 1X1 301 ABC
000 1X1 135 ABC
C
FIELD1 FIELD2 FIELD3 FIELD4
112 000 24D SFD
D
FIELD1 FIELD2 FIELD3 FIELD4
2RD VCB MNK GGG
我想每条数据只显示一行,但是我无法做到这一点。有什么建议吗?
【问题讨论】:
-
1.
MAX(B.FIELD1)不一定会将 b.field3 返回为 24D。由于所有field1都已保存,因此您可以随机获取任意行。 2.D.FIELD3 = C.FIELD3。这不会为您的方案返回任何内容。你确定加入条件是正确的 -
嗯。我想我没有正确地说明它。但基本上,即使在加入其他表之后,我也想获得
B.FIELD1的唯一值。 -
在这种情况下,
B.FIELD1只有 1 个唯一值,但既然如此,为什么你将B.FIELD3设为24D而不是301或其他值?那里的逻辑是什么? -
很遗憾,我认为我真的把插图搞砸了。只是不介意表格,已编辑并删除了结果。您对实现目标有什么建议/提示吗?谢谢。
-
你的问题确实不清楚。您可以搜索
row_number() over (partition by ...子句,并在更正后将其与您的主查询一起使用。现在使用外部查询,每个分区只选择 1 行。不幸的是,没有适当的样本和预期的输出,我只能猜测你想要什么。