请看上图,第一个表格是表里存储的内容。第二个表格是我想要得到的内容,请问SQL如何写?? 备注:
一、没有关联号的,则按照正常显示。有关联号的,合并规则是:有【关联号】的 那么相同的关联号合并成一行显示,这行里面,如果某字段内容相同,则合并后,不重复显示内容。例如上图中的关联号:【20030108】,由于性别相同,所以合并后,重复的性别就不显示了,而专业却不相同,所以合并后,都显示。二、上图表中,我只是列举了几个典型的字段,实际上大概有50个字段左右,记录也是列举了典型的几条。但需要的结果显示规则都是一样的。请问这个SQL如何写呢??或者说这样的效果如何实现呢??
一、没有关联号的,则按照正常显示。有关联号的,合并规则是:有【关联号】的 那么相同的关联号合并成一行显示,这行里面,如果某字段内容相同,则合并后,不重复显示内容。例如上图中的关联号:【20030108】,由于性别相同,所以合并后,重复的性别就不显示了,而专业却不相同,所以合并后,都显示。二、上图表中,我只是列举了几个典型的字段,实际上大概有50个字段左右,记录也是列举了典型的几条。但需要的结果显示规则都是一样的。请问这个SQL如何写呢??或者说这样的效果如何实现呢??
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([姓名] [nvarchar](10),[性别] [nvarchar](10),[专业] [nvarchar](10),[关联号] [nvarchar](10))
INSERT INTO [tb]
SELECT 'a1','男','文科','20030108' UNION ALL
SELECT 'a2','男','文科',NULL UNION ALL
SELECT 'a3','男','理科','20030108' UNION ALL
SELECT 'a4','男','理科',NULL UNION ALL
SELECT 'a5','女','文科','20040223'--SELECT * FROM [tb]-->SQL查询如下:
;WITH t AS
(
SELECT rn=ROW_NUMBER()OVER(PARTITION BY ISNULL(关联号,CHECKSUM(*)) ORDER BY 姓名),*
FROM tb
)
SELECT 姓名,
性别=CASE rn
WHEN 1 THEN 性别
ELSE ''
END,
专业,
关联号=CASE rn
WHEN 1 THEN 关联号
ELSE ''
END
FROM t
ORDER BY CASE 性别 WHEN '女' THEN 1 ELSE 0 END
/*
姓名 性别 专业 关联号
---------- ---------- ---------- ----------
a1 男 文科 20030108
a3 理科
a2 男 文科 NULL
a4 男 理科 NULL
a5 女 文科 20040223(5 行受影响)
*/?
--借用TONY哥的语句,给分请给3楼
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([姓名] [nvarchar](10),[性别] [nvarchar](10),[专业] [nvarchar](10),[关联号] [nvarchar](10))
INSERT INTO [tb]
SELECT 'a1','男','文科','20030108' UNION ALL
SELECT 'a2','男','文科',NULL UNION ALL
SELECT 'a3','男','理科','20030108' UNION ALL
SELECT 'a4','男','理科',NULL UNION ALL
SELECT 'a5','女','文科','20040223'--SELECT * FROM [tb]
SELECT rn=ROW_NUMBER()OVER(PARTITION BY ISNULL(关联号,CHECKSUM(*)) ORDER BY 姓名),*
INTO #T
FROM tb SELECT 姓名,
性别=CASE rn
WHEN 1 THEN 性别
ELSE ''
END,
专业,
关联号=CASE rn
WHEN 1 THEN 关联号
ELSE ''
END
FROM #t
ORDER BY CASE 性别 WHEN '女' THEN 1 ELSE 0 END
/*
姓名 性别 专业 关联号
---------- ---------- ---------- ----------
a1 男 文科 20030108
a3 理科
a2 男 文科 NULL
a4 男 理科 NULL
a5 女 文科 20040223(5 行受影响)
*/