【发布时间】:2012-06-27 03:14:59
【问题描述】:
我的情况是我有两张桌子。我想将它们连接在一起并让重复的记录出现在同一行。下面给出的模拟表结构
主表 列:MKey1,MKey2,MData1,MData2,MData3
补充表 列:SPrimaryKey,SKey1,SKey2,SData1,SData2
我想将 MainTbl 左连接到 SuppTbl。但是,SuppTbl 包含重复的 SKey1 和 SKey2 组合键。
我想要的结果如下,其中“-#”表示重复数。
MKey1,MKey2,MData1,MData2,MData3,SData1-1,SData2-1,SData1-2,SData2-2
本质上,连接中的所有字段都应包含在基于 Key1 和 Key2 的一行中。
肖恩·W 的尝试回答
SELECT
MainTbl.MKey1,
MainTbl.MKey2,
tcd.SData1 AS SData11,
tcd.SData2 AS SData22,
tcr.SData1 AS SData12,
tcr.SData2 AS SData22
FROM MainTbl
LEFT JOIN SuppTbl tcd
ON MainTbl.MKey1=tcd.SKey1 AND MainTbl.MKey2=tcd.SKey2
LEFT JOIN SuppTbl tcr
ON MainTbl.MKey1=tcr.SKey1 AND MainTbl.MKey2=tcr.SKey2
WHERE tcd.SData1 < tcr.SData1
结果没有成功。没有提取任何记录。
【问题讨论】:
-
Table2 最多有两个匹配项吗?
-
@tony 不一定。它可能有一个或两个。如果它有更多,这是一种罕见的情况,但有可能。我确实有条件可以将其限制为两个。 “WHERE DataD1 = 4”和“WHERE DataD1=22”
-
您使用的是什么风格的 SQL?
-
充其量,您会得到一些未填充列的行,其中只有 1 个连接。没事?然后只需对第二个表执行 2 个左连接并返回结果。
-
您的列和样本数据不匹配,并且您的 where 条件(在注释中)将返回样本数据的零记录。再加上 500 多个没有换行符的字符,阅读起来非常困难,并且会给想要帮助您的人带来障碍。
标签: sql sql-server tsql row