多列中的不同值

时间:2012-08-13 19:29:08

标签: sql distinct sybase-ase

我正在尝试为表中的多个列获取不同的值。

例如,如果我的表有COL1,COL2,COL3作为列,我正在运行像

这样的查询
SELECT DISTINCT COL1, COL2, COL3 FROM TABLEx

但是会发生什么取决于其中一列中的数据我在其他两列中获得重复值。如果COL1有40个唯一值,COL2只有10个唯一值,COL3有5个唯一值。我得到40行数据,其中COL1是唯一的,COL2 / COL3有重复值。如何获取每列的DISTINCT值并将重复值替换为空值。我这样做只是为了在网页中为我的下拉列表获取不同的值。我总是可以对每个字段执行单独的查询,但我认为它不是很有效。我如何处理这个问题的任何帮助?

5 个答案:

答案 0 :(得分:4)

  

我总是可以为每个字段执行单独的查询

是的!这样做!

  

但我觉得它不是很有效。

这可能很好。您可以通过向每列添加单独的索引来提高性能。如果您仍然担心它会很慢,请测量它以确保它。如果事实证明这确实是一个问题,那么您可能需要考虑使用缓存。

答案 1 :(得分:0)

不完全确定这是您正在寻找的东西,并且它只会比单独的查询更有效:

select distinct a, null, null
  from MyTable
 union
select distinct null, b, null
  from MyTable
 union 
select distinct null, null, c
  from MyTable

注意:这肯定不是编写SQL查询的正确的方式,但确实为问题提供了可能的解决方案。

答案 2 :(得分:0)

如果您的Sybase版本恰好包含row_nubmer(),则可以使用union all执行此操作:

select seqnum, max(col1) as col1, max(col2) as col2, max(col3) as col3
from ((select row_number() over (order by col1) as seqnum
              col1, NULL as col2, NULL as col3
       from (select distinct col1
             from t
            ) t
      ) union all
      (select row_number() over (order by col2) as seqnum
              NULL as col1, col2, NULL as col3
       from (select distinct col2
             from t
            ) t
      ) union all
      (select row_number() over (order by col3) as seqnum
              NULL as col1, NULL as col2, col3
       from (select distinct col1
             from t
            ) t
      )
     ) t
group by seqnum
order by seqnum

这会为每个值添加一个序列号,然后使用group by将它们组合在一起。

答案 3 :(得分:0)

我使用了单个查询,但只有在获得resultSet后才使用Set来存储唯一值。这样我就不会使用多个查询加载数据库。

答案 4 :(得分:-1)

SELECT DISTINCT c1, c2 FROM t

也可以使用

SELECT c1, c2 FROM t GROUP BY c1, c2

它对我有用。