处理某分组列值有重复时,只显示分组的首行列值

来源:互联网 发布:linux 卸载服务 编辑:程序博客网 时间:2024/05/18 20:13


--------------------------------------------------------------------------

--  Author : htl258(Tony)

--  Date   : 2010-04-26 09:03:25

--  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)

--          Jul  9 2008 14:43:34

--          Copyright (c) 1988-2008 Microsoft Corporation

--          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

--  Blog   : http://blog.csdn.net/htl258

--  Subject:处理某分组列值有重复时,只显示分组的首行列值

--------------------------------------------------------------------------

--> 生成测试数据表:tb

 

IF NOT OBJECT_ID('[tb]') IS NULL

    DROP TABLE [tb]

GO

CREATE TABLE [tb]([chuanming] NVARCHAR(10),[huoming] NVARCHAR(10))

INSERT [tb]

SELECT N'东方',N'乙烯' UNION ALL

SELECT N'东方',N'笨' UNION ALL

SELECT N'东方',N'甲烷' UNION ALL

SELECT N'东方',N'碳' UNION ALL

SELECT N'东方',N'石化' UNION ALL

SELECT N'海欣',N'乙烯' UNION ALL

SELECT N'海欣',N'笨' UNION ALL

SELECT N'海欣',N'甲烷' UNION ALL

SELECT N'海欣',N'碳' UNION ALL

SELECT N'海欣',N'石化'

GO

--SELECT * FROM [tb]

 

-->SQL查询如下:

--1.2000/2005通用

SELECT CASE WHEN [huoming]=(SELECT TOP 1 [huoming] FROM tb WHERE [chuanming]=t.[chuanming])

               THEN [chuanming] ELSE ''

        END [chuanming],

    [huoming]

FROM tb t

--2.2005以上用

SELECT CASE ROW_NUMBER()OVER(PARTITION BY [chuanming] ORDER BY GETDATE()) WHEN 1

           THEN [chuanming] ELSE ''

       END [chuanming],

    [huoming]

FROM tb t

/*

chuanming  huoming

---------- ----------

东方       乙烯

           笨

           甲烷

           碳

           石化

海欣       乙烯

           笨

           甲烷

           碳

           石化

 

(10 行受影响)

 

*/

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/26/5528553.aspx