저는 여기서 벗어나는 방법이라고 생각하지만 최선의 방법은 확실하지 않습니다. 제품 테이블과 예약 테이블이 있습니다. 특정 시간대에 대한 예약을 기반으로 제품의 가용성을 즉시 평가해야합니다. 각 제품에 대해 여러 예약이있을 수 있지만 결과는 가용성을위한 계산 된 열이있는 제품 테이블이어야합니다. 여기에 내가 지금까지 가지고있는 것이 있지만 왼쪽 외부 조인은 내가 필요로하는 것이 아니다. 저의 진술과 함께 더 나은 접근법이 있고 결합을 제거 할 것이라고 확신합니다. 좋아요 것SQL 왼쪽 결합 및 계산 된 열이 원하는 결과를 생성하지 않음
CREATE FUNCTION [dbo].[GetAvailableReservations]
(
@StartDate DateTime,
@EndDate DateTime
)
RETURNS TABLE
AS
RETURN
(
SELECT p.*,
CASE
WHEN r.Status = 'Active' AND r.StartDate >= @StartDate AND r.EndDate <= @EndDate
THEN 'Reserved'
WHEN r.Status = 'Primary' AND r.StartDate >= @StartDate AND r.EndDate <= @EndDate
THEN 'Sold'
WHEN r.Status = 'Primary' AND r.StartDate >= DATEADD(YY,-1,GETDATE()) AND r.EndDate <= GETDATE()
THEN 'Refused'
WHEN EXISTS (SELECT * FROM dbo.URL u WHERE u.URL = p.URL AND u.Date < DATEADD(YY,-2,GETDATE()))
THEN 'Needs Review'
ELSE
'Available'
END AS Availability
FROM dbo.Product AS p
LEFT JOIN dbo.Reservation AS r
ON p.Name = r.Title
)
는 LINQ - 투 - SQL에서 호출 할 수있는 기능이 될 후 나는 그들의 가용성 제품 목록 떨어져 조회 할 수 있습니다.
편집 - 다음은 몇 가지 샘플 데이터입니다.
Products:
Name URL Cost
-------------------------------------------
Gears http://www.gearfinder.com 250
Shocks http://www.shockfinder.com 110
Bolts http://www.boltfinder.com 5
Reservations:
Title Status StartDate EndDate
----------------------------------------------
Gears Active 2012-01-01 2012-12-31
Gears Primary 2012-01-01 2012-12-31
Gears Inactive 2012-01-01 2012-12-31
Bolts Inactive 2011-01-01 2011-12-31
Bolts Active 2013-01-01 2013-12-31
Bolts Primary 2014-01-01 2014-12-31
URLs:
URL Date
--------------------------------------
http://www.shockfinder.com 2010-01-01
무엇이 질문입니까? LINQ-to-SQL로 UDF를 호출하는 방법을 모르십니까? 당신은별로 구체적이지 않습니다. –
제 질문은 함수 자체와 조인 및 case 문이 즉시 열을 계산하기위한 최선의 방법인지 여부입니다. 나는 왜 내가이 접근법을 처음부터 취하고 있는지에 대한 전반적인 설명을하기를 원했다. –