SQL“Distinct”和Group By Clause

时间:2016-10-11 05:08:50

标签: sql sql-server group-by distinct

搜索此网站,但没有看到任何类似和帮助的主题。

示例:我的数据如下

Col1       Col2
aaaa       1111
aaaa       2222
bbbb       4444
bbbb       3333

如何查询如下表?

Col1       Col2
aaaa       1111
           2222
bbbb       4444
           3333

我目前用于测试此目的的查询

SELECT Col1,Col2 FROM msaEPGerror 
FROM Table1
GROUP BY Col1,Col2

尝试使用distinct和group by,但它仍然显示其他数据。是的,我的数据库包含了超过十万行。 可能吗 ?我只是试着运气,因为之前我使用Report Builder设计了东西,但现在尝试将其迁移到SQL。

由于

3 个答案:

答案 0 :(得分:2)

在查询下方的col2上使用order by将起作用:

select case rank when 1 then col1 else '' end as col1, col2 
from (select col1,col2,
      rank() over (partition by col1 order by col2) as rank 
     from table1) tab;

答案 1 :(得分:2)

使用以下查询,它将返回特定列的单个值:

SELECT CASE WHEN t.id = (SELECT TOP 1 t2.id FROM Table t2
WHERE t2.Col1 = t.Col1
GROUP BY t2.Col1) THEN t.Col1
ELSE
''
END AS Col1, t.Col2
FROM Table t

我猜,该表有一个主键。

答案 2 :(得分:2)

首先:您不想使用GROUP BY,因为这是为了汇总您的数据,例如每个col1只有一个结果行。

然后您也不想使用DISTINCT,因为这样可以消除重复的行。您的表格不包含重复的行。

您真正想要做的是在显示数据时抑制重复值。你必须在这里做出选择:要么在你的GUI中(在你编写的程序中或报告引擎中)这样做,这将是最常用的方法。或者使用SQL查看上一条记录。执行此操作的功能是LAG

select
  col1,
  case when t.col1 = lag(t.col1) over (order by t.col1, t.col2) then null else col1 end
   as col2
from table1 t
order by t.col1, t.col2;