【问题标题】:Select unique rows with where in clause (SQL Server)使用 where in 子句选择唯一行 (SQL Server)
【发布时间】:2019-12-13 18:29:21
【问题描述】:

我正在尝试为列中的每个唯一值返回一个 json。

但是,当我尝试从子查询中进行选择时,会返回整个结果集。

示例表

| json   | column | 
|--------|--------|
| {obj1} | 1      |
| {obj2} | 1      |
| {obj3} | 2      |

示例查询

select distinct
[json]
from someTable 
where [column] in (
  select distinct 
  [column]
  from someTable
)

实际输出

| json   |
|--------|
| {obj1} |
| {obj2} | 
| {obj3} |

预期输出

| json   |
|--------|
| {obj1} |
| {obj3} |

如何为每个唯一列值仅选择 1 个json?

【问题讨论】:

  • 表中有主键like和id吗?
  • @forpas 是的,一个自动递增的整数主键。

标签: sql-server where-in


【解决方案1】:

如果与列相关的输出无关紧要是obj1 Or obj2,则您必须像这样使用 Group By:

SELECT
  Min(JSon) AS Json ,Column
FROM
 someTable 
Group By column

【讨论】:

    【解决方案2】:

    如果您想要每个column 的第一个[json],请使用row_number():

    select t.[json] from (
      select 
        [json],
        row_number() over (partition by column order by id) rn
      from someTable 
    ) t
    where t.rn = 1
    

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多