Sql 多列中的不同值

Sql 多列中的不同值,sql,distinct,sap-ase,Sql,Distinct,Sap Ase,我试图为表中的多个列获取不同的值 例如,如果我的表有COL1、COL2、COL3列,并且我运行的查询如下 SELECT DISTINCT COL1, COL2, COL3 FROM TABLEx 但是发生的情况取决于其中一列中的数据,我在另外两列中得到了重复的值。如果COL1有40个唯一值,而COL2只有10个唯一值,而COL3有5个唯一值。我得到了40行数据,其中COL1是唯一的,COL2/COL3有重复的值。如何为每列获取不同的值,并用空值替换重复的值。我这样做只是为了在网页中为下拉列表获

我试图为表中的多个列获取不同的值

例如,如果我的表有COL1、COL2、COL3列,并且我运行的查询如下

SELECT DISTINCT COL1, COL2, COL3 FROM TABLEx
但是发生的情况取决于其中一列中的数据,我在另外两列中得到了重复的值。如果COL1有40个唯一值,而COL2只有10个唯一值,而COL3有5个唯一值。我得到了40行数据,其中COL1是唯一的,COL2/COL3有重复的值。如何为每列获取不同的值,并用空值替换重复的值。我这样做只是为了在网页中为下拉列表获取不同的值。我总是可以对每个字段执行单独的查询,但我认为这不是很有效。在我如何处理这件事时有什么帮助吗

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

对!!做这个

但我认为这不是很有效


可能没问题。您可以通过向每列添加单独的索引来提高性能。如果你仍然担心它会变慢,请测量它以确定。如果它真的是一个问题,那么你可能想考虑使用缓存。 不完全确定这就是您要寻找的,而且它只比单独的查询稍微高效一些:

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

注意:这当然不是编写sql查询的正确方法,但确实为该问题提供了一个可能的解决方案。

如果您的Sybase版本碰巧包含row_numer(),您可以使用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将它们组合起来。

我使用了一个查询,但endedup仅在获得结果集后使用集合来存储唯一的值。这样,我就不会用多个查询加载数据库

SELECT DISTINCT c1, c2 FROM t
也可以使用

SELECT c1, c2 FROM t GROUP BY c1, c2

这对我来说很有效。

OP使用的是Sybase ASE,据我所知,它不支持ROW_NUMBER()函数……我猜一些基于Sybase的数据库确实——Sybase IQ和SQL Anywhere。我可以说这取决于所使用的版本。我不会说“取决于所使用的版本”--Sybase ASE与Sybase IQ和SQLAnywhere是完全不同的产品。特别是当问题读起来有些像是因为列可能是“不相关的”。或者执行“分组”客户端。这将返回col1/col2值的所有组合。这不是OP要求的。