我有一个具有1对多关系的数据集,即:联系信息:
ContID Country Add1 Add2 City ect...
001 USA 123 N/A Blah
以上是标题记录
细节:
ContID ContType PhNum Ext
001 FAX 11111 X222
001 BUSN 33333 X444
我的最终目标是创建如下所示的新记录:
ContID Country Add1 Add2 City ContType1 ContType2 PhNum1 PhNum2 Ext1 Ext2
001 USA 123 N/A Blah FAX BUSN 11111 3333 x222 x444
我认为有一些方法可以解决这个问题,因为XML是一种方式,可能是另一种方式。我对FOR XML
不太满意,我认为这可能是最好的选择。
答案 0 :(得分:0)
如果你想要一个简单的老式查询来完成这项工作,请看下面的内容:
/* Table declaractions and inserts for testing only, you will need to amend for
* your own structure.
*/
DECLARE @ContactInfo TABLE ( ContID int identity(1,1),
Country varchar(10),
Add1 varchar(20),
Add2 varchar(20),
City varchar(10))
INSERT INTO @ContactInfo(Country, Add1, Add2, City)
VALUES ('USA','123','N/A','Blah')
DECLARE @ContactDetail TABLE ( ContID int,
ContType varchar(5),
PhNum varchar(10),
Ext varchar(10))
INSERT INTO @ContactDetail(ContID, ContType, PhNum, Ext)
VALUES (1, 'Fax','11111','X1111')
INSERT INTO @ContactDetail(ContID, ContType, PhNum, Ext)
VALUES (1, 'Busn','22222','X2222')
INSERT INTO @ContactDetail(ContID, ContType, PhNum, Ext)
VALUES (1, 'Mobi','33333','X3333')
INSERT INTO @ContactDetail(ContID, ContType, PhNum, Ext)
VALUES (1, 'Home','44444','X4444')
SELECT ci.ContId
, cd1.ContType ContType1, cd1.PhNum PhNum1, cd1.Ext Ext1
, cd2.ContType ContType2, cd2.PhNum PhNum2, cd2.Ext Ext2
, cd3.ContType ContType3, cd3.PhNum PhNum3, cd3.Ext Ext3
, cd4.ContType ContType4, cd4.PhNum PhNum4, cd4.Ext Ext4
FROM @ContactInfo ci
INNER JOIN @ContactDetail cd1 ON cd1.ContId = ci.ContId AND cd1.ContType = 'Fax'
INNER JOIN @ContactDetail cd2 ON cd2.ContId = ci.ContId AND cd2.ContType = 'Busn'
INNER JOIN @ContactDetail cd3 ON cd3.ContId = ci.ContId AND cd3.ContType = 'Mobi'
INNER JOIN @ContactDetail cd4 ON cd4.ContId = ci.ContId AND cd4.ContType = 'Home'
基本前提是从@ContactInfo到ContactDetail的每个连接代表您的一种类型。如果每种类型只有1个详细条目,如果每种类型都有多个条目可能,那么这将工作正常,那么您将需要不同的方法。