2013-08-30 7 views
0

Ищу для заявления Выберите в Sql Server, я хочу некоторые вещи, как этогоВыберите оператор в запросе 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

Ничего себе. ANSI X12 EDI через SQL. Ты храбрый человек. –

ответ

0

Чтобы получить две вещи на одной и той же линии, как правило, предполагает агрегацию (или в некоторых случаях соединение). Вам понадобится агрегация вместе со случаем:

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

«Руководство» отлично работает, до тех пор, пока оно недоступно по какой-либо причине (временно отключено, перемещено или что-то еще). Ответы здесь должны содержать достаточную информацию, чтобы стоять самостоятельно, с внешними ссылками, используемыми для * дополнительной информации *. Вы не указали * начальную информацию *, к которой это может быть добавлением. –

Смежные вопросы