SQL 如果列中的值大于 1,则加入重复行
SQL Join with duplicate row if value in column is more than 1
我有两个 table。第一个包含文档和详细信息,第二个包含此文档的位置。我想加入这个 table,这样如果 table2 中的数量大于 1,我就会在结果中得到该行数。示例如下。
例子。
1 Table:
ID_DOC || NR_DOC ||年份 ||日期 ||国家
123 || WZ-20 || 2015 ||20150129|| PL
124 || WZ-22 || 2015 ||20150128||德国
2 Table:
ID_PAL || TYPE_P ||质量 ||总和 || ID_DOC
111 ||欧元 || 1 ||200 || 123
112 ||欧元 || 3 ||900 || 124
结果:
ID_DOC || NR_DOC||年份 ||日期 ||国家 || 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
有可能吗?谢谢你的建议。
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
我假设您希望结果中的行数与 Qty 列中的值相同,在这种情况下,您可以使用数字 table - a table其中包含填充有大量数字的单个 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
创建数字的快速方法table:
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;
我有两个 table。第一个包含文档和详细信息,第二个包含此文档的位置。我想加入这个 table,这样如果 table2 中的数量大于 1,我就会在结果中得到该行数。示例如下。
例子。 1 Table:
ID_DOC || NR_DOC ||年份 ||日期 ||国家
123 || WZ-20 || 2015 ||20150129|| PL
124 || WZ-22 || 2015 ||20150128||德国
2 Table:
ID_PAL || TYPE_P ||质量 ||总和 || ID_DOC
111 ||欧元 || 1 ||200 || 123
112 ||欧元 || 3 ||900 || 124
结果:
ID_DOC || NR_DOC||年份 ||日期 ||国家 || 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
有可能吗?谢谢你的建议。
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
我假设您希望结果中的行数与 Qty 列中的值相同,在这种情况下,您可以使用数字 table - a table其中包含填充有大量数字的单个 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
创建数字的快速方法table:
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;