Создание сложного представления в SQL Server 2005 - PullRequest
0 голосов
/ 30 марта 2012

У меня есть таблица, которая выглядит так:

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? Если да, то как мне это сделать?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Без использования вида:

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
0 голосов
/ 30 марта 2012

Ну, это определенно возможно, но вам придется либо использовать хранимую процедуру, либо какую-то хитрость.Это было бы проще с хранимой процедурой, потому что вы могли бы просто зацикливать записи с помощью курсора (хотя в зависимости от количества записей это могло бы оказать негативное влияние на производительность).

Возможно, вы могли бы присоединить таблицу ксам и каким-то образом использовать операторы case ... если вам нравится решать головоломки и не спешите:)

Или я также слышал, что вы можете делать рекурсивные запросы с помощью CTE.Возможно, вы сможете объединить два запроса (один, который выбирает ImpFile, а другой, который выбирает записи задания), и использовать рекурсивный CTE, чтобы как-то это сделать.

Обязательно ли это должен быть VIEW?Не могли бы вы хотя бы использовать хранимую процедуру для создания временной таблицы?Лично я бы обработал это форматирование в C # (или на вашем языке по вашему выбору).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...