【问题标题】:Select unique value on one column then still display other columns on multi table在一列上选择唯一值,然后仍然在多表上显示其他列
【发布时间】: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 行。不幸的是,没有适当的样本和预期的输出,我只能猜测你想要什么。

标签: sql oracle


【解决方案1】:

我认为,您的查询有误。您已使用列B.FIELD1 计算最大值MAX(B.FIELD1),同时在GROUP BY 部分中使用了此列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2018-03-29
    • 2010-12-19
    相关资源
    最近更新 更多