2013-11-15 63 views
0

考虑我的表删除重复的列值

+----+------+--------+----------+ 
| ID | Name | Salary | Month | 
+----+------+--------+----------+ 
| 1 | a | 5000 | Jan  | 
| 2 | b | 5500 | Jan  | 
| 3 | b | 5300 | Feb  | 
| 4 | b | 5300 | Mar  | 
| 5 | b | 5300 | Apr  | 
| 6 | b | 5300 | May  | 
| 7 | b | 5300 | June  | 
| 8 | b | 5300 | July  | 
+----+------+--------+----------+

我需要显示

+----+------+--------+----------+ 
| ID | Name | Salary | Month | 
+----+------+--------+----------+ 
| 1 | a | 5000 | Jan  | 
| 2 | b | 5500 | Jan  | 
| 3 |  | 5300 | Feb  | 
| 4 |  | 5300 | Mar  | 
| 5 |  | 5300 | Apr  | 
| 6 |  | 5300 | May  | 
| 7 |  | 5300 | June  | 
| 8 |  | 5300 | July  | 
+----+------+--------+----------+

能ANY1帮助

+3

哪个是你的数据库? MS Sql服务器,Oracle,MySql等? – TechDo

+2

从3-8行中删除名称的逻辑是什么? – jpw

回答

0

我假设的结果由name列进行排序(可能那么薪水?),您可以使用分析函数ROW_NUMBER来挑选第一个,并只打印出一个。 您可能要调整了一下周围的查询,但这里的主要思想:

SELECT id, CASE rn WHEN 1 THEN name ELSE null END, salary, month 
FROM  (SELECT id, name, salary, month, 
       ROW_NUMBER() OVER (PARTITION BY name ORDER BY salary) AS rn 
     FROM some_table) 
ORDER BY name, rn 
0

请尝试以下查询MS SQL SERVER:

select 
    a.ID, 
    case when a.Name=b.Name then NULL else a.Name end Name, 
    a.Salary, 
    a.[Month] 
from YourTable a left join YourTable b 
    on a.ID=b.ID+1