私は3つのテーブル:Animal
,CareTaker
、およびApppointment
を持っているとします。いくつかのデータを含むスキーマ:View in TSQLの列として行を選択する方法?
Create Table Animal (Id int identity, Name varchar(25))
Create Table CareTaker(Id int identity, Name varchar(50))
Create Table Appointments(Id int identity, AnimalId int, CareTakerId int, AppointmentDate DateTime, BookingDate DateTime)
Insert into Animal(Name) Values('Ghost'), ('Nymeria'), ('Greywind'), ('Summer')
Insert into CareTaker(Name) Values ('Jon'), ('Arya'), ('Rob'), ('Bran')
Insert into Appointments(AnimalId, CareTakerId, AppointmentDate, BookingDate) Values
(1, 1, GETDATE() + 7, GetDate()), -- Ghost cared by Jon
(1, 2, GETDATE() + 6, GetDate()), -- Ghost cared by Arya
(4, 3, GETDATE() + 8, GetDate()) -- Summer cared by Rob
私は各動物の世話人を列として3つだけ選択したいと思います。このようなもの:
私は他の任命については気にしませんが、次の3つは各動物についてです。 3つの予定がない場合は、空白/空白にすることができます。
私はこれを行う方法についてかなり混乱しています。
私は、サブクエリでそのような何かを、それを試してみました:
select Name,
-- Care Taker 1
(Select Top 1 C.Name
From Appointments A
Join CareTaker C on C.Id = A.CareTakerId
Where A.AppointmentDate > GETDATE()
And A.AnimalId = Animal.Id
Order By AppointmentDate) As CareTaker1,
-- Appointment Date 1
(Select Top 1 AppointmentDate
From Appointments
Where AppointmentDate > GETDATE()
And AnimalId = Animal.Id
Order By AppointmentDate) As AppointmentDate1
From Animal
しかし、第二世話人のために、私はわからないので(句は、トップ1からIDを除外する場所の選択第二のレベルを行かなければならないでしょう
他に2番目の行を得るにはどうすればいいですか?)select top 1 after excluding first row id; where first row id is (select top 1)
のようなものです。
これは素晴らしい方法のようには見えません。
希望の出力を得るにはどうすればよいですか?
をこんにちは、ありがとう、私は今、ピボットテーブルに探しています...あなたのクエリは非常に私がやりたいことはありませんします。http:// i.imgur.com/jQrcydK.pngトップは私の元の投稿のサブクエリで、下はクエリ – LocustHorde
@ LocustHordeです。 。 。残念ながら、SQL Fiddleを構築することはできません。しかし、これは3つの予定まで一緒に動物1行を返す必要があります。 –
こんにちは、まあ、SQL Fiddleはしばらくの間私のために壊れてしまった、私は構築するか、既存のURLを読み込むことはできません。 'seqnum'と' row_number() 'が何をしているのか説明してください。クエリが機能せず、列への行の転置の仕方が分かりません – LocustHorde