选择不同列的所有列

时间:2014-09-25 05:06:40

标签: sql oracle

我需要从具有超过200列的表中获取特定列的不同行。我怎样才能做到这一点?

我用过

Select distinct col1 , * from table;

但失败了。

请提出一个优雅的方法来实现这一目标。

此致 塔伦

2 个答案:

答案 0 :(得分:0)

如果要为特定列中的每个不同值创建一行,则解决方案是:

SELECT col1, MAX(col2), MAX(col3), MAX(col4), ...
FROM mytable
GROUP BY col1

我随意选择了MAX()。它也可以是MIN()或其他一些聚合函数。关键是如果你使用GROUP BY来确保在col1中每个值获得一行,那么 all 其他列必须在聚合函数内。

没有办法写MAX(*)来获得所有列的处理。抱歉,您必须写出所有列名称(至少在此查询中需要的列名称,可能不是全部200个)。

答案 1 :(得分:0)

我们可以为每个ROW_NUMBER()生成一个COL1序列,然后选择每个序列的第一个条目。

SELECT * FROM
(
  SELECT E.* , ROW_NUMBER() OVER( PARTITION BY COL1 ORDER BY 1) AS ID
    FROM YOURTABLE E
) MYDATA
 WHERE MYDATA.ID = 1

A working example in fiddle