次のクエリがあります。
select
tt.ItemOrder, tt.DisplayVal as Task, tt.Responsible as ResParty,
tt.DaysDue,
ActualDate = (select convert(varchar(10), cnfmdate, 101) from ProSer where PId = @PID), PDate = @PDate
from
tblTimeline tt
where
tt.ID = 1
私がする必要があるのは、PID を使用してビューを呼び出すことができるように、それをビューに配置することです。私は次のことを思いつき、クロス結合を使用しました。
create view view1 as
select
ps.PID, tt.ID, tt.ItemOrder, tt.DisplayVal as Task,
tt.Responsible as ResParty, tt.DaysDue,
ps.cnfmdate As ActualDate, ProgStartDate as ProgramDate
from
tblTimeline tt
cross join
ProSer ps
where
tt.ID = 1 and ps.cancelled = 0
今、私は次のことができることに注意してください
select *
from view1
where PID = '34343'
その後、ビューから取得できます。
さて、以下と同様に行う方法がわかりません。その場合、上記と同様にクロス結合する必要があります。
実際の日付がどのように複雑であるかに注目してください。上記と同様にクロステーブルを使用する必要がありますが、ご覧のとおりではなく、やや複雑です。
(この部分の注意として、上記のビュー 1 に UNION で簡単に参加します。
select
tt.ItemOrder, tt.DisplayVal as Task, tt.Responsible as ResParty,
ActualDate = (
CASE
WHEN
NOT EXISTS(SELECT * FROM Spls WHERE RequestRcvd = 1 AND PID = @PID)
THEN
'N/A'
WHEN EXISTS (SELECT * FROM spls WHERE RequestRcvd = 1 AND RequestRcvdDate IS NOT NULL)
THEN
(SELECT CONVERT(VARCHAR(10),MAX(RequestRcvdDate),101) from spls WHERE RequestRcvd = 1 AND PID = @PID)
END
)
from
tblTimeline tt
where
tt.ID = 9
上記の方法と同様に次のことを実行できるように、(ビュー内にある) クロス結合でこれを作成する方法を知る必要があります。
select *
from view1
where PID = '34343'
その後、ビューから取得できます。