1

我有一个包含以下数据的表:

TableColumnsId  AssumedDataType     Ranking
43264           System_String       1
43265           System_Int32        2
43265           System_Double       10
43266           System_Double       10
43266           System_Int32        2
43267           System_Int32        2
43267           System_Double       10
43268           System_Double       9
43268           System_Int32        8
43268           System_String       9
43269           System_String       9
43269           System_Int32        7
43269           System_Double       10
43270           System_String       5
43271           System_String       1
43272           System_String       8
43272           System_Double       4

我想每个 TableColumnsId 只返回一列,摘要 AssumedDataType 应该是排名较低的那一列。

因此上述数据应变为:

TableColumnsId  AssumedDataType     Ranking
43264           System_String       1
43265           System_Int32        2
43266           System_Int32        2
43267           System_Int32        2
43268           System_Int32        8
43269           System_Int32        7
43270           System_String       5
43271           System_String       1
43272           System_Double       4

如果我将 min 聚合函数与 group by 一起使用,它将按字母顺序返回第一个 AssumedDataType ,这将不起作用。

4

3 回答 3

3

你想使用row_number()

select TableColumnsId, AssumedDataType, Ranking
from (select t.*, row_number() over (partition by TableColumnsId order by Ranking) as seqnum
      from t
     ) t
where seqnum = 1;

row_number()函数为每个组分配一个序号(由partition by子句定义)。组内的顺序由order by子句确定。因此,此构造将“1”分配给每个 TableColumnsId 排名最高的行 - 并且where子句选择此值。

于 2013-09-10T13:46:21.713 回答
0

在这里,我选择排名最高的 ColumnIds,然后将其与主表连接以获取该 columnId 的 DataType 和排名:

with Rank_cte(ColumnId,Ranking)
as(Select TableColumnsId,Min(Ranking) from TableName Group By TableColumnID)

Select A.TableColumnsId,AssumedDataType,A.Ranking From TableName A join 
Rank_cte B on A.TableColumnsId=B.ColumnId and A.Ranking=B.Ranking
于 2013-09-10T13:50:17.610 回答
0

试试这个:

SELECT TableColumnsId, AssumedDataType, Ranking
FROM T t1
WHERE Ranking =
    (SELECT MIN(Ranking)
    FROM T t2
    WHERE t1.TableColumnsId = t2.TableColumnsId);
于 2013-09-10T13:57:41.907 回答