【发布时间】:2014-08-05 12:14:38
【问题描述】:
我还有一个快速的 SQL 问题。 考虑下表:
Value1 | Value2 | Value3
------------------------------------
Peter | Blue | Red
Peter | Null | Null
Martin | Blue | Null
Martin | Null | Null
Boris | Null | Null
Sergej | Null | Green
Sergej | Null | Null
你看这是一个特殊的案例。有些情况下,Value2 和 Value3 都设置在一个条目中,有些情况下设置了 Value2 和 Value3,有些情况下没有设置(没有重复)。
所以问题是:如何删除重复项(通过 Value1)并获取信息最多的条目? IE。如果设置了 Value2 和/或 Value3,则使用这些条目。显然,我不能只使用“非空”,因为有些情况(开始时不重复的情况)我需要涵盖两者都在 Null 上的情况。
第二个问题是我只有读取权限,所以它必须发生在 Select 语句中。非常感谢。
【问题讨论】:
-
您使用的是什么 RDMS?
-
该样本中根本没有
duplicates。但抛开语义不谈,使用的是什么 dbms 类型(供应商)?例如,您的 dbms 平台是否支持 dense_rank() 或 row_number()? -
你期望结果是什么,就像user2067753说没有重复记录。
-
感谢您的 cmets。抱歉,我可能选错词了。当然,它们不是完全重复的。考虑与上面相同的表,但在 Value1 和 Value2 之间还有 10 个列。认为它们对于具有相同名称的每个条目都是相同的。因此,除了最后 2 列(Value2 和 Value3)之外,条目是“重复的”。我对上表的预期输出:Peter-Blue-Red Martin-Blue-Null Boris-Null-Null Sergej-Null-Green 我使用 MS-SQL。
标签: sql