簡體   English   中英

多列中的不同值

[英]Distinct values in multiple columns

我試圖獲取表中多列的不同值。

例如,如果我的表有COL1,COL2,COL3作為列,我正在運行查詢,如

SELECT DISTINCT COL1, COL2, COL3 FROM TABLEx

但是發生的情況取決於其中一列中的數據,我在另外兩列中得到重復值。 如果COL1有40個唯一值,COL2只有10個唯一值,COL3有5個唯一值。 我得到40行數據,其中COL1是唯一的,COL2 / COL3有重復值。 如何獲取每列的DISTINCT值並將重復值替換為空值。 我這樣做只是為了在網頁中為我的下拉列表獲取不同的值。 我總是可以對每個字段執行單獨的查詢,但我認為它不是很有效。 任何幫助,因為我如何處理這個?

我總是可以為每個字段執行單獨的查詢

是! 做這個!

但我覺得它不是很有效。

這可能很好。 您可以通過向每列添加單獨的索引來提高性能。 如果您仍然擔心它會很慢,請測量它以確保它。 如果事實證明這確實是一個問題,那么您可能需要考慮使用緩存。

不完全確定這是你正在尋找的東西,它只會比單獨的查詢更有效:

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_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組合它們。

我使用了單個查詢,但只有在獲得resultSet時才使用Set來存儲唯一值。 這樣我就不會使用多個查詢加載數據庫。

SELECT DISTINCT c1, c2 FROM t

也可以使用

SELECT c1, c2 FROM t GROUP BY c1, c2

它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM