2011-04-29 83 views
0

嗨,我有一個交易表,我需要返回整個表,但我需要的標題和價格是不同的,因爲有很多雙重上升,我已經把在示例場景下面從表中選擇所有,其中2列是不同的

Col ID || Col Title || Col Price || Col Source 
a b c d 
a b c b 
b a a c 
b a a 1 

預期結果:

a b c d 
b a a c 

我不知道是否不被這裏使用不同的或組,任何建議,將不勝感激

乾杯

斯科特

=======================

看你的一些建議,我將不得不重新考慮這,謝謝你們

+2

你爲什麼想要abcd而不是abcb? – 2011-04-29 16:13:40

+2

你怎麼知道哪個'Source'使用,因爲在你的例子中每個都有2個? – 2011-04-29 16:15:14

+0

你不能有「整個表」和「標題和價格是不同的」*在同一時間* – gbn 2011-04-29 16:22:54

回答

1

這會隨便挑行之一爲每個不同的(價格,標題)對

;WITH myCTE AS 
(
    SELECT 
     *, 
     ROWNUMBER() OVER (PARTITION BY Price, Title ORDER BY Source) AS rn 
    FROM 
     MyTable 
) 
SELECT 
    * 
FROM 
    myCTE 
WHERE 
    rn = 1 
0

您可以通過使用組,但僅返回名稱和價格,ID和源會必須被忽略

0

您正在詢問整個表格,但在您的示例輸出中,您已經丟失了兩條記錄,因此失去了「Col Source」的價值。

a b c b 
b a a 1 

集團通過將幫助你寫的很簡單的查詢

select id, title, price, source from table group by title, price 
0

一個DISTINCTGROUP BY通常會產生相同的查詢計劃,所以性能應該是在兩個查詢構造相同。應該使用GROUP BY將聚合運算符應用於每個組。如果您只需刪除重複項,請使用DISTINCT。如果您使用子查詢執行計劃對於該查詢會有所不同,那麼您需要在決定執行計劃更快之前檢查執行計劃。

您應該將GROUP BY作爲結果集中所需的整個列。但是,DISTINCT將僅返回特定列的唯一列表。

SELECT ID, Title, Price, Source 
FROM table as t 
GROUP BY Title, Price 
相關問題