SQL Server:联接、重复记录和联合

SQL Server:联接、重复记录和联合,sql,sql-server,Sql,Sql Server,假设我正在连接表,目的是生成一个最终表,该表已将一些行转换为列。FK是外键约束,Info1和Info2用于返回日期或null FK1 | Info1 | Date1 FK1 | Info2 | Date2 FK2 | Info1 | Date1 FK2 | Info2 | Date2 我要返回的表应如下所示: FK1 | Date1 | Date2 FK2 | Date1 | Date2 相反,回报是: FK1 | Date1 | Date2 FK1 | Date1 | Date2 FK2

假设我正在连接表,目的是生成一个最终表,该表已将一些行转换为列。FK是外键约束,Info1和Info2用于返回日期或null

FK1 | Info1 | Date1
FK1 | Info2 | Date2
FK2 | Info1 | Date1
FK2 | Info2 | Date2
我要返回的表应如下所示:

FK1 | Date1 | Date2
FK2 | Date1 | Date2
相反,回报是:

FK1 | Date1 | Date2
FK1 | Date1 | Date2
FK2 | 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)
问题是连接是在这些值上进行连接的
(1161162)
,但我不知道如何“连接”连接(如果有意义的话)


干杯。

不知怎的,我想这就是你想要的问题:

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;

这是一个聚合查询,将两个日期放在同一行上。顺便说一下,对列名使用单引号是个坏主意。请改用双引号或大括号。

您能提供一些实际数据和符合您实际查询的所需结果吗?用于发布示例。非常好,谢谢。我必须删除sgCaption字段,因为它包含与其他所有内容不同的值,并且正在强制执行复制。