选择具有不同列的唯一行

时间:2017-01-16 20:14:27

标签: sql-server select

我想选择具有不同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?

2 个答案:

答案 0 :(得分:2)

您需要对要分组的值GROUP BY,然后在其他列上使用聚合函数,例如MINMAX

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

答案 1 :(得分:0)

这取决于您是否需要Bezeichnung和Norm列来自同一行。在你的样本数据中,它并不重要,因为所有的Norm值都是相同的,但是如果你有不同的Norm值,那么如果你有一行的Bezeichnung值和另一行的Norm值那么重要吗?如果您根本不关心这些列包含的内容,那么您可以完全忽略它们,只需:

SELECT DISTINCT d, P, dw FROM myTable

如果你想查看Bezeichnung值和Norm值,但如果这些值来自同一行并不重要,那么来自@ 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