[英]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.