2014-01-29 4 views
2

Предположим, что я присоединяюсь к таблицам с целью создания финальной таблицы, которая преобразует некоторые строки в столбцы. FK является ограничение внешнего ключа, Info1 и info2 используются для возврата либо дату или нулевойSQL Server: объединения, дубликаты записей и объединение

FK1 | Info1 | Date1 
FK1 | Info2 | Date2 
FK2 | Info1 | Date1 
FK2 | Info2 | Date2 

В таблице я хочу вернуться должен выглядеть следующим образом:

FK1 | Date1 | Date2 
FK2 | Date1 | Date2 

Вместо, Что Возвращаться:

После прочтения некоторых других сообщений мне кажется, что для этого мне нужен СОЮЗ, но я не могу понять, куда его поместить. Мой фактический запрос ниже:

select c.idContract, 
     c.sgCommonName, 
     cl.sgClientTitle, 
     cl.sgHomeAddress, 
     cl.sgLetterCasual, 
     c.sgLotAddress, 
     ffd.sgCaption, 
     ffv.sgTextValue, 
     case when fkidffdefinition = 1161 then dtDateValue end as '11 Day', 
     case when fkidffdefinition = 1162 then dtDateValue end as '30 Day' 
from 
      tblContracts c 
inner join tblClients cl on cl.idClient = c.fkidClient 
inner join tblFlexFieldValues ffv on ffv.fkidcontract = c.idContract 
inner join tblFlexfieldDefinition ffd on ffd.idFlexFieldDefiniition = ffv.fkidFFDefinition 

where ffd.idFlexFieldDefiniition in (1161,1162) 

Проблема заключается в том, что присоединяется к присоединяется эти значения (1161,1162), но я не понимаю, как «сцепить» стыки (если это имеет смысл)

Приветствия ,

+0

Не могли бы вы предоставить некоторые фактические данные и желаемые результаты, соответствующие вашему фактическому запросу? –

+0

Используйте [SQLFiddle] (http://sqlfiddle.com/), чтобы опубликовать пример. – EfrainReyes

ответ

3

Так или иначе, я думаю, что это вопрос, который вы хотите:

select c.idContract, c.sgCommonName, cl.sgClientTitle, cl.sgHomeAddress, cl.sgLetterCasual, 
     c.sgLotAddress, ffd.sgCaption, ffv.sgTextValue, 
     max(case when fkidffdefinition = 1161 then dtDateValue end) as "11 Day", 
     max(case when fkidffdefinition = 1162 then dtDateValue end) as "30 Day" 
from tblContracts c inner join 
    tblClients cl 
    on cl.idClient = c.fkidClient inner join 
    tblFlexFieldValues ffv 
    on ffv.fkidcontract = c.idContract inner join 
    tblFlexfieldDefinition ffd 
    on ffd.idFlexFieldDefiniition = ffv.fkidFFDefinition 
where ffd.idFlexFieldDefiniition in (1161, 1162) 
group by c.idContract, c.sgCommonName, cl.sgClientTitle, cl.sgHomeAddress, cl.sgLetterCasual, 
     c.sgLotAddress, ffd.sgCaption, ffv.sgTextValue; 

Это агрегация запрос, который будет ставить две даты на той же строке. Кстати, это плохая идея использовать одинарные кавычки для имен столбцов. Вместо этого используйте двойные кавычки или квадратные скобки.

+0

Отлично, спасибо. Мне пришлось удалить поле sgCaption, поскольку оно содержало другое значение для всего остального и обеспечивало дублирование. –

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