2017-01-16 67 views
-1

我想選擇具有明顯d(和Pdw),見下面的示例表的行選擇唯一行:具有不同柱

Bezeichnung Norm  d P dw 
-------------------------------------- 
M14 x 130 ISO 4014 14 2 19,15 
M14 x 140 ISO 4014 14 2 19,15 
M18 x 70 ISO 4014 18 2,5 24,85 
M18 x 80 ISO 4014 18 2,5 24,85 
M22 x 220 ISO 4014 22 2,5 31,35 
M22 x 90 ISO 4014 22 2,5 31,35 
M36 x 340 ISO 4014 36 4 51,11 
M36 x 140 ISO 4014 36 4 51,11 
M20 x 100 ISO 4014 20 2,5 27,7 
M20 x 110 ISO 4014 20 2,5 27,7 

期望的結果將是:

Bezeichnung Norm  d P dw 
-------------------------------------- 
M14 x 130 ISO 4014 14 2 19,15 
M18 x 70 ISO 4014 18 2,5 24,85 
M22 x 220 ISO 4014 22 2,5 31,35 
M36 x 340 ISO 4014 36 4 51,11 
M20 x 100 ISO 4014 20 2,5 27,7 

我不在乎哪個Bezeichnung列值被返回。什麼是必需的SQL?

+0

事情是這樣的:選擇不同的Bezeichnung,規範,d,P,DW從表 - 但它不起作用 – Oleg

+0

我認爲你可以使用group by子句。如果你可以共享create table scrit,我可以幫你編寫sql查詢 –

回答

2

您需要GROUP BY上的值要GROUP BY,然後用在其他列的聚合函數,如MINMAX

SELECT MAX(Bezeichnung) 
     ,MAX(Norm) 
     ,d 
     ,P 
     ,dw 
FROM YourTable 
GROUP BY d, P, dw 
0

這取決於你是否需要Bezeichnung和規範列來自同一行。在你的樣本數據中,這並不重要,因爲所有的Norm值都是相同的,但是如果你可以有不同的Norm值,那麼如果你有一行中的Bezeichnung值和另一行中的Norm值,它會起作用嗎?如果你不介意在所有這些列包含,那麼你可以完全不理會他們,只是:

SELECT DISTINCT d, P, dw FROM myTable 

如果你想看到一個Bezeichnung值和標準值,但它不一樣,如果這些數值關係來自同一行,那麼來自@ dan-field的答案將會成功。

如果你想獲得Bezeichnung和Norm值總是來自同一行,那麼你需要:

;with Results as 
    (select ROW_NUMBER() Over (Partition By d, P, dw) rownum, * 
    from myTable) 
select Bezeichnung, Norm, d, P, dw from Results where rownum = 1