SQL如果列中的值大于1,则使用重复行加入

时间:2015-01-29 13:54:14

标签: sql sql-server sql-server-2008 join

我有两张桌子。首先包含文档和详细信息,第二个包含此文档的位置。我想加入这个表,以便如果在table2中数量大于1,我会在结果中获得该行数。示例如下。

实施例。 1表:

ID_DOC || NR_DOC ||年||日期||国家
123 || WZ-20 || 2015年|| 20150129 || PL
124 || WZ-22 || 2015年|| 20150128 || DE

2表:

ID_PAL || TYPE_P || QUA || SUMWEIGHT || ID_DOC
111 || EURO || 1 || || 200 123个
112 || EURO || 3 || || 900 124

结果:

ID_DOC || NR_DOC ||年|| DATE ||国家|| TYPE_P || QUA || SUMW
123 || WZ-20 || 2015年|| 20150129 || PL ||欧元|| 1个|| 200
124 || WZ-22 || 2015年|| 20150129 || PL ||欧元|| 1 || 300
124 || WZ-22 || 2015年|| 20150129 || PL ||欧元|| 1 || 300
124 || WZ-22 || 2015年|| 20150129 || PL ||欧元|| 1个|| 300

有可能吗?谢谢你的建议。

2 个答案:

答案 0 :(得分:0)

select tbl1.id_doc, tbl1.nr_doc, tbl1.year, tbl1.date, tbl1.country, tbl2.type_p, tbl2.qua.tbl2.sumweight
from doc table1, location table2
where table1.id_doc = table2.id_doc
and (select count(*) from location where id_doc = table2.id_doc ) > 1 

答案 1 :(得分:0)

我假设您希望结果中的行数与Qty列中的值相同,在这种情况下,您可以使用数字表执行此操作 - 包含填充了单个int列的表很多数字。然后你可以像这样进行连接

SELECT * FROM [dbo].[Table2] PP 
INNER JOIN [dbo].[Table1] DD on PP.docid = DD.docid 
INNER JOIN Numbers NN on PP.qty >= NN.n

创建数字表的快捷方法:

CREATE TABLE dbo.Numbers
(
  n INT PRIMARY KEY
);


INSERT dbo.Numbers(n) 
SELECT TOP (10000) rn = ROW_NUMBER() OVER 
 (ORDER BY s1.[object_id]) 
FROM sys.all_objects AS s1 
CROSS JOIN sys.objects AS s2;