0

考虑到我的桌子

+----+------+--------+----------+
| 身份证 | 姓名 | 工资 | 月 |
+----+------+--------+----------+
| 1 | 一个 | 5000 | 一月 |
| 2 | 乙 | 5500 | 一月 |
| 3 | 乙 | 5300 | 二月 |
| 4 | 乙 | 5300 | 三月 |
| 5 | 乙 | 5300 | 四月 |
| 6 | 乙 | 5300 | 五月 |
| 7 | 乙 | 5300 | 六月 |
| 8 | 乙 | 5300 | 七月 |
+----+------+--------+----------+

我需要显示

+----+------+--------+----------+
| 身份证 | 姓名 | 工资 | 月 |
+----+------+--------+----------+
| 1 | 一个 | 5000 | 一月 |
| 2 | 乙 | 5500 | 一月 |
| 3 | | 5300 | 二月 |
| 4 | | 5300 | 三月 |
| 5 | | 5300 | 四月 |
| 6 | | 5300 | 五月 |
| 7 | | 5300 | 六月 |
| 8 | | 5300 | 七月 |
+----+------+--------+----------+

any1可以帮忙吗

4

2 回答 2

0

请尝试以下查询 MS Sql 服务器:

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 
于 2013-11-15T07:07:33.280 回答
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
于 2013-11-15T07:05:09.453 回答