2013-08-30 150 views
0

我期待在SQL Server中的Select語句Select語句,我想這樣的在SQL Server查詢

SELECT     
    st.segment_guid as ST_Segment_Guid, 
    ST.ST02 as [Transaction_Set_ControlNumber],  
    N1.N102 AS [Payer_Name],       
    N1.N104 AS [Payer_Identification_Number], 
    N1.N102 AS [Payee_Name], 
    N1.N104 END AS [Payee_Identification_Number], 

FROM X12_ST ST 
    INNER JOIN X12_N1 N1 ON st.segment_guid = n1.parent_segment_guid 
where ST.x12_interchange_guid = '3ff7d629-0036-4deb-bb69-31f8c159f71e' 

這裏的一些事情,如果N1.LoopID'1000A'那麼它應該從付款人列選擇。如果N1.LoopID'1000B'那麼它應該從收款人列中選擇。

並且對於ST.x12_interchange_guid ='3ff7d629-0036-4deb-bb69-31f8c159f71e',應該有一個付款人和一個收款人,我想打擾付款人,收款人在選擇該行時,在單行中顯示該ST.x12_interchange_guid。

+2

閱讀CASE語句。 – dcaswell

+1

哇。通過SQL的ANSI X12 EDI。你是個勇敢的人。 –

回答

0

爲了得到在同一行上兩件事情通常意味着聚合(或在某些情況下加入)。您需要彙總以及case語句:

SELECT st.segment_guid as ST_Segment_Guid, 
     ST.ST02 as [Transaction_Set_ControlNumber],  
     max(case when N1.LoopID = '1000A' then N1.N102 end) AS [Payer_Name],       
     max(case when N1.LoopID = '1000A' then N1.N104 end) AS [Payer_Identification_Number], 
     max(case when N1.LoopID <> '1000A' then N1.N102 end) AS [Payee_Name], 
     max(case when N1.LoopID <> '1000A' then N1.N104 end) AS [Payee_Identification_Number] 
FROM X12_ST ST INNER JOIN 
    X12_N1 N1 
    ON st.segment_guid = n1.parent_segment_guid 
where ST.x12_interchange_guid = '3ff7d629-0036-4deb-bb69-31f8c159f71e' 
group by st.segment_guid, ST.ST02; 
+0

謝謝@Gordon Linoff – Naveen

0
CASE 
    WHEN N1.LoopID = '1000A' 
    THEN (Column from Payer Table) 
    ELSE SomeOtherColumn 
END AS theColumn 

Documentation

+3

除了外部鏈接之外,您應該在這裏包含解釋性文字。不提供代碼的答案,如鏈接答案,不鼓勵。 (你還應該顯示多個CASE分支,因爲你只覆蓋了'LoopID ='1000A'的選擇,而不是'1000B'(或''2000A'或其他值)的可能性。) –

+1

@ KenWhite我的回答爲OP提供了一個示例塊和指導,幫助他們自己找出完整的解決方案。 – Kermit

+0

「指導」效果很好,直到出於某種原因(臨時離線,移動或其他)暫時無法使用爲止。這裏的答案應該包含足夠的信息以獨立存在,外部鏈接用於*補充信息*。你還沒有提供*初始信息*,它可能是一個補充。 –