我有一个看起来像这样的表:
Name Job Year ImpFile ImpDate
------------------------------------------------
John Clerk 1986 Imp01 20.01.2012
James Assistant 1990 Imp01 20.01.2012
Anna Manager 1982 Imp02 26.02.2012
Sam Salesman 1985 Imp02 26.02.2012
Dean Cleaner 1985 Imp02 26.02.2012
我需要创建一个看起来像这样的视图:
Name ImpFile/Job Year
--------------------------------
Imp01 20.01.2012
John Clerk 1986
James Assistant 1990
Imp02 26.02.2012
Anna Manager 1982
Sam Salesman 1985
Dean Cleaner 1985
是否有可能在Microsoft SQL Server 2005中执行此类操作?如果是,那我该怎么办?
答案 0 :(得分:1)
不使用视图:
create table test(
name varchar(10),
Job varchar(20),
year smallint,
ImpFile varchar(10),
ImpDate datetime)
insert into Test
values('John', 'Clerk', 1986, 'Imp01', '20.01.2012')
insert into Test
values('James', 'Assistant', 1990, 'Imp01', '20.01.2012')
insert into Test
values('Anna', 'Manager', 1982, 'Imp02', '26.02.2012')
insert into Test
values('Sam', 'Salesmas', 1985, 'Imp02', '26.02.2012')
--drop table test
select * from
(
select name,Job,ImpFile,year from test
group by name, Job, ImpFile, year
union all
select distinct null, null, ImpFile + ' ' + convert(nvarchar, ImpDate, 104), null from test
) tablePlusHeaders
order by left(ImpFile,5), name, year
答案 1 :(得分:0)
嗯,这绝对是可能的,但你必须要么使用存储过程,要么使用一些技巧。使用存储过程会更直接,因为您可以使用游标简单地循环记录(尽管这取决于记录的数量,这可能会对性能产生负面影响)。
你可能可以将表格加入到自身中并以某种方式使用案例陈述...如果你喜欢解决谜题并且不急于:)
或者我也听说过你可以用CTE进行递归查询。您可以将两个查询组合在一起(一个选择ImpFile,另一个选择作业记录)并使用递归CTE以某种方式实现此目的。
它绝对必须是一个视图吗?您是否至少可以使用存储过程来创建临时表?我个人会用C#(或您选择的语言)处理这种格式。