2017-01-31 1 views
0

다음 쿼리를 사용하여 Futuredial_Validation이라는 새 테이블을 볼 수 있도록 수정했습니다. 모든 조건과 조인을 썼지 만 여전히 테이블을보고 있지는 않습니다. 하나라고 cellscripter, 쿼리의 나머지 작품, 난 정말 덕분에 어떤 도움을 주셔서 감사합니다 :LEFT OUTER JOIN MATCHING

SELECT row_number() OVER (ORDER BY wms_us.wms_us.rrno.rrdate, wms_us.wms_us.rrno.pono, wms_us.wms_us.transferboxdet.meidhex, att.Date_cleared) AS ROW_ID, 
    wms_us.wms_us.rrno.pono                              AS ATT_PO, 
    wms_us.wms_us.rrno.rrdate                             AS Received_Date, 
    CASE 
    WHEN (wms_us.wms_us.model.modeldesc = 'MIXED') 
    THEN wms_us.wms_us.transferboxdet.basemodel 
    ELSE wms_us.wms_us.model.modelbase 
    END AS Model, 
    CASE 
    WHEN LEN(wms_us.wms_us.transferboxdet.meidhex) >= 15 
    THEN LEFT(wms_us.wms_us.transferboxdet.meidhex, 14) 
    ELSE wms_us.wms_us.transferboxdet.meidhex 
    END AS IMEI, 
    /*Check in Futerdial else obtain the values from cellscripter*/ 
    CASE 
    WHEN (Future.[Error Code] = '1') 
    THEN Future.LocalTime 
    ELSE att.Date_cleared 
    END AS Date_cleared, 
    CASE 
    WHEN (Future.[Error Code] = '1') 
    THEN 'PASS' 
    ELSE att.Result 
    END AS Result 
FROM wms_us.wms_us.transferboxdoc 
INNER JOIN wms_us.wms_us.transferboxdet 
ON wms_us.wms_us.transferboxdoc.transferboxdocid = wms_us.wms_us.transferboxdet.transferboxdocid 
INNER JOIN wms_us.wms_us.rrno 
ON wms_us.wms_us.transferboxdet.rrnoid = wms_us.wms_us.rrno.rrnoid 
INNER JOIN wms_us.wms_us.model 
ON wms_us.wms_us.transferboxdoc.modelid = wms_us.wms_us.model.modelid 
LEFT OUTER JOIN Futerdial.dbo.Futuredial_Validation AS Future 
ON Future.IMEI = LEFT(wms_us.wms_us.transferboxdet.meidhex, 14) 
LEFT OUTER JOIN DRSCSQLQADB01.att_view2.dbo.attview2 AS att 
ON att.IMEI      = LEFT(wms_us.wms_us.transferboxdet.meidhex, 14) 
WHERE (wms_us.wms_us.rrno.rrdate > '2016-12-01') 
+0

스키마에 대한 세부 사항 - 특히 이상한 테이블 이름과 4 부분 표기법을 사용하여 수행 할 작업을 추측하기는 다소 어렵습니다. –

+0

여기에 일부 테이블 별명을 사용하십시오. 이와 같이 열에 3 ~ 4 개의 부분 이름이 사용되지 않습니다. –

+0

질문을 개선하기 위해 여기를보십시오 .https : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

답변

0

대부분의 경우 : 하나 귀하의 사양은 작동하지 않습니다에 가입하거나 [Error Code]case 표현은 정확하지 않습니다.

확인이 함께 [Future_imei][Error Code]에 대한 모든 값을 얻을 경우 :

select 
    row_id = row_number() over (
     order by rrno.rrdate 
     , rrno.pono 
     , tbdet.meidhex 
     , att.Date_cleared) 
    , att_po = rrno.pono 
    , Received_Date = rrno.rrdate 
    , Model=case 
     when (m.modeldesc = 'mixed') 
     then tbdet.basemodel 
     else m.modelbase 
     end 
    , imei=case 
     when len(tbdet.meidhex) >= 15 
     then left(tbdet.meidhex, 14) 
     else tbdet.meidhex 
     end 
    , [Future_imei] = Future.imei 
    , Future.[Error Code] 
    , Date_cleared=case 
     when (Future.[Error Code] = '1') 
     then Future.LocalTime 
     else att.Date_cleared 
     end 
    , [Result]=case 
     when (Future.[Error Code] = '1') 
     then 'pass' 
     else att.Result 
     end 
from wms_us.wms_us.transferboxdoc as tbdoc 
    inner join wms_us.wms_us.transferboxdet as tbdet 
    on tbdoc.transferboxdocid = tbdet.transferboxdocid 
    inner join wms_us.wms_us.rrno as rrno 
    on tbdet.rrnoid = rrno.rrnoid 
    inner join wms_us.wms_us.model as m 
    on tbdoc.modelid = m.modelid 
    left outer join Futerdial.dbo.Futuredial_Validation as Future 
     on Future.imei = left(tbdet.meidhex, 14) 
    left outer join drscsqlqadb01.att_view2.dbo.attview2 as att 
     on att.imei = left(tbdet.meidhex, 14) 
    where (rrno.rrdate > '2016-12-01') 
당신이뿐만 아니라, 달성하기 위해 노력 중 스키마를 단순화하거나 우리에게 더를 제공하는지 설명 할 수 있다면 도움이 될
+0

아니요, Future_imei 및 오류 코드의 모든 값이 null인데 왜 이런 일이 발생합니까? ?? –

+0

당신의 조인 조건이 잘못되었다고 생각합니다.'Future.imei = left (tbdet.meidhex, 14)' – SqlZim

+0

제안 사항이 있습니까? –