2012-03-30 40 views
0

我有一個表,看起來像這樣:創建SQL Server中的複雜視圖2005

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

此鏈接可以幫助http://stackoverflow.com/questions/235515/hierarchical-queries-in-sql-server-2005 – 2012-03-30 08:04:40

+0

我想你只需要結果設置爲由ImpDate和ImpFile訂購的'姓名','工作','年份'和'ImpFile/Job'列。在這種情況下,選擇將會非常簡單。 – 2012-03-30 08:19:00

+0

在報告工具中執行此類重新格式化會更好。您試圖強制兩種不同類型的數據佔用結果集中的同一列 - 這不是SQL方式。而且,正如@jbl所指出的那樣,您無法保證從視圖返回的行的順序。 – 2012-03-30 08:51:04

回答

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 
+0

大感謝的人,這是我想要的。 – Brezhnews 2012-03-30 10:47:46

0

嗯,這是絕對有可能的,但你必須使用存儲過程或其他一些欺騙。使用存儲過程會更直接,因爲您可以簡單地使用遊標來循環記錄(儘管取決於可能會對性能產生負面影響的記錄數)。

你也許可以加入表本身以某種方式使用case語句...如果你喜歡解決難題,並不會急於:)

或者我還聽說過,你可以做遞歸查詢與CTE的。您可能能夠將兩個查詢結合在一起(一個選擇ImpFile,另一個選擇工作記錄)並使用遞歸CTE以某種方式完成此操作。

它絕對必須是一個視圖嗎?你至少可以使用存儲過程來創建臨時表嗎?我個人會在C#中處理這種格式(或您選擇的語言)。

+0

您不需要使用視圖。只需從子查詢中選擇: – JotaBe 2012-03-30 10:00:22