2012-03-30 7 views
0

Erstellen habe ich eine Tabelle, die wie folgt aussieht:eine komplizierte Ansicht in 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 

Und ich brauche eine Ansicht zu erstellen, die etwa wie folgt aussieht:

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 

Ist es möglich, so etwas in Microsoft SQL Server 2005 zu tun? Wenn ja, wie mache ich das?

+0

Dieser Link kann helfen http://stackoverflow.com/questions/235515/hierarchical-queries-in-sql-server-2005 –

+0

Ich glaube, Sie brauchen nur das Ergebnis wird mit den Spalten 'Name', 'Job', 'Jahr' und 'ImpFile/Job' festgelegt, die von ImpDate und ImpFile bestellt werden. In diesem Fall ist die Auswahl sehr einfach. –

+0

Es wäre besser, diese Art von Neuformatierung in einem Berichtstool durchzuführen. Sie versuchen zu erzwingen, dass zwei verschiedene Datentypen die gleiche Spalte in der Ergebnismenge belegen - das ist nicht die SQL-Methode. Und wie @jbl hervorhebt, können Sie auch nicht die Reihenfolge der Zeilen garantieren, die von einer Ansicht zurückgegeben werden. –

Antwort

1

Ohne eine Ansicht mit:

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

Vielen Dank Mann, das was ich wollte. – Brezhnews

0

Nun, es ist definitiv möglich, aber Sie müssen entweder eine gespeicherte Prozedur oder andere Tricks verwenden. Es wäre einfacher mit einer gespeicherten Prozedur, weil Sie einfach die Datensätze mit einem Cursor durchlaufen könnten (obwohl dies je nach Anzahl der Datensätze negative Auswirkungen auf die Performance haben könnte).

Sie könnten wahrscheinlich die Tabelle mit sich selbst verbinden und irgendwie Case-Anweisungen verwenden ... wenn Sie wie das Lösen von Rätseln und sind nicht in Eile :)

Oder ich habe auch gehört, dass Sie rekursive Abfragen tun können, mit CTEs. Sie können möglicherweise zwei Abfragen zusammenführen (eine, die das ImpFile auswählt, und die andere, die die Jobdatensätze auswählt) und einen rekursiven CTE verwenden, um dies irgendwie zu bewerkstelligen.

Muss es unbedingt ein VIEW sein? Könnten Sie zumindest eine gespeicherte Prozedur verwenden, um stattdessen eine temporäre Tabelle zu erstellen? Persönlich würde ich diese Formatierung in C# (oder Ihrer Sprache der Wahl) behandeln.

+0

Sie müssen keine Ansicht verwenden. Wählen Sie einfach aus der Unterabfrage: – JotaBe