2017-01-16 69 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