【问题标题】:Sql to select the rows and ignore the duplicate userid in SQL Server [closed]Sql 选择行并忽略 SQL Server 中的重复用户 ID [关闭]
【发布时间】:2018-02-15 16:43:07
【问题描述】:

我尝试了“SELECT * FROM property_table where text is not NULL and method is not NULL”,但我缺少 user2 所有条目和 user4 条目。

【问题讨论】:

标签: sql sql-server sql-server-2012


【解决方案1】:

一种方法是聚合:

select col1, col2, max(col3), max(col4)
from t
group by col1, col2;

对于您的示例数据,只过滤掉NULL 值会更容易:

select t.*
from t
where col3 is not null;

【讨论】:

  • 有没有一种方法可以只按前 2 列分组,而其余列没有聚合函数。原因是如果我使用 max 函数,我会丢失一些行。
【解决方案2】:

理论上NULLNULL 不重复。它们无法比较。

去除“逻辑重复”的方法

select *
from Table
where isnull([column3],'') <> isnull([column4],'')

【讨论】:

  • 哈哈。我喜欢你对这个模棱两可的问题的解释。我不赞成isnull(),而是更喜欢coalesce()
  • @GordonLinoff 我真的很想知道为什么你更喜欢 coalesce 而不是 isnull。它们是非常不同的野兽,都有一些有趣的警告。 FWIW,我倾向于同意你的观点,并且使用 coalesce 比 isnull 更常见。
  • @SeanLange:我猜他选择了coalesce 而不是另一个,因为:ISNULL 返回值始终被认为是不可为空的,而带有非空参数的COALESCE 被认为是空的。所以表达式 ISNULL(NULL, 1)COALESCE(NULL, 1) 虽然等效但具有不同的可空性值。如果您在计算列中使用这些表达式、创建键约束或使标量 UDF 的返回值具有确定性以便可以对其进行索引,这会有所不同
  • 如果第二个条件为空,@SChowdhury ISNULL 可以返回空值。两者确实不等价,因为返回的数据类型是不同的。
  • 考虑是关键字! :)
猜你喜欢
  • 1970-01-01
  • 2022-12-07
  • 2018-01-11
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多