2014-03-31 4 views
0

의 값에 따라 컬럼의 값을 대체합니다 :SQL 쿼리는 다음과 같이 내가 데이터가 SQL Server의 테이블이 다른

Costing_ID CostingName CostingNumber CostingNumberSuffix StartDate 
1   Test  1234        2014-04-01 
2   Test 2  1234   AA     2014-04-06 
3   Test 3  5668        2014-04-09 
4   Test 4  1234   AB     2014-04-14 

내가 모든 행을 반환하는 뷰를 생성해야하지만 CostingNumberSuffix가 비어 있지 않은 항목의 StartDate를 비어있는 해당 CostingNumber의 StartDate로 대체합니다.

그래서 내 쿼리가 반환해야 다음

Costing_ID CostingName CostingNumber CostingNumberSuffix StartDate 
    1   Test  1234        2014-04-01 
    2   Test 2  1234   AA     2014-04-01 
    3   Test 3  5668        2014-04-09 
    4   Test 4  1234   AB     2014-04-01 

어떻게 이렇게 가겠어요?

+0

테스트 3의 날짜는 무엇입니까? – Mihai

+0

테스트 3에는 자체 CostingNumber와 접미사가 없으므로 StartDate를 유지합니다. CostingNumber 5668 및 Suffix ZZ로 테스트 6을 수행했으면 Test 3 등의 StartDate를 얻을 수 있습니다. 각 CostingNumber에는 접미어가없는 레코드 하나만 존재합니다. – Istari

답변

1

이 검색어를 입력하십시오. 나는 그것을 테스트하지 않은,하지만 당신은 아이디어를 얻을 :

SELECT 
    Costing_ID, 
    CostingName, 
    CostingNumber, 
    CostingNumberSuffix, 
    CASE 
     WHEN CostingNumberSuffix != '' 
      THEN (SELECT s.StartDate FROM table s WHERE s.CostingNumber = t.CostNumber and s.CostNumberSuffix = '') 
     ELSE 
      StartDate 
    END 
FROM table t 
0
select ti.costingid, t1.Costing_ID, t1.CostingName, t1.CostingNumber, 
    t1.CostingNumberSuffix, 
    coalesce (t2.StartDate,t2.StartDate) 
from <table name> t1 
left join (select * from <table name> where t2.CostingNumberSuffix = '') t2 
on t1.costingnumber = t2.costingnumber 
0

SQL 서버 2012 :

select Costing_ID, CostingName, CostingNumber, CostingNumberSuffix, 
first_value(StartDate) over (partition by CostingNumber order by CostingNumberSuffix 
    rows unbounded preceding) as StartDate 
from Costing 
order by Costing_ID 
0

이 솔루션은 (CTE A.k.a) 공통 테이블 식을 사용합니다. CTE는 CostingNumberSuffix가 비어있는 항목의 StartDate를 찾습니다.

WITH CTE AS 
(
    SELECT CostingNumber, StartDate 
    FROM <tablename> 
    WHERE CostingNumberSuffix IS NULL 
) 
SELECT 
    T.Costing_ID, 
    T.CostingName, 
    T.CostingNumber, 
    T.CostingNumberSuffix, 
    ISNULL(CTE.StartDate, T.StartDate) AS StartDate 
FROM <tablename> T 
LEFT OUTER JOIN CTE 
ON T.CostingNumber = CTE.CostingNumber 
관련 문제