您的位置:首页 > 数据库

sql 实现相同记录的为空显示(重复内容不合并只将多余内容显示为空的小心得)

2013-04-29 15:18 639 查看
一直受到CSDN的帮助,前几天将SQL数据导入到datagridview,遇到重复数据,开始想直接在datagridview里合并,后来发现很麻烦。就在SQL上想办法,开始查发现大家都是group by 了事,但这只能在同时没有其它不重复的项时有用。用distinct也是类似情况。在CSDN里综合其它兄弟方法有了点小心得。

表1

工程名 工作类别 工作人员 id

项目1 A 牛1 1

项目1 A 牛2 2

项目1 B 牛3 3

项目1 B 牛4 4

结果:

工程名 工作类别 工作人员 id

项目1 A 牛1 1

牛2 2

B 牛3 3

牛4 4

CREATE TABLE [dbo].[t_test](

[工程名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[工作类别] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[工作人员] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[id] [int] NULL

) ON [PRIMARY]

代码:

SELECT CASE WHEN id = ( SELECT MIN(id)

FROM 表1 a

WHERE b.工程名 = a.工程名

GROUP BY 工程名

HAVING COUNT(工程名) > 1

) THEN 工程名

WHEN id = ( SELECT MIN(id)

FROM 表1 a

WHERE b.工程名 = a.工程名

GROUP BY 工程名

HAVING COUNT(工程名) = 1

) THEN 工程名

ELSE ''

END AS '工程名' ,

CASE WHEN id = ( SELECT MIN(id)

FROM 表1 a

WHERE b.工程名 = a.工程名

AND b.工作类别 = a.工作类别

GROUP BY 工程名

HAVING COUNT(工程名) > 1

) THEN 工作类别

WHEN id = ( SELECT MIN(id)

FROM 表1 a

WHERE b.工程名 = a.工程名

GROUP BY 工程名

HAVING COUNT(工程名) = 1 --这个等号不能用全角的,会报错的。

) THEN 工作类别

ELSE ''

END AS '工作类别' --这个位置不能有逗号,会报错的。

FROM 表1 b

来源: http://bbs.csdn.net/topics/390432249?page=1 作者:keepfire
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐