ID |Number|Qty|OrderNumber|Date
456-98A|746-96|0.1|00 |2015-01-01
456-98A|746-96|0.1|00 |2015-01-01
456-98A|746-96|0.1|00 |2015-01-01
456-98A|746-96|0.1|00 |2015-01-01
456-98A|321-96|0.3|05 |2015-01-01
456-98A|321-96|0.3|05 |2015-01-01
sql中的上表给了我多个相同ID的行。我如何过滤这些数据,这样如果Number和orderNumber相同,那么它必须只为我提供一行而不是多个值。例如预期结果将是
ID |Number|Qty|OrderNumber|Date
456-98A|746-96|0.1|00 |2015-01-01
456-98A|321-96|0.3|05 |2015-01-01
答案 0 :(得分:1)
您可以按需要或全部或不同的列进行分组。
select ID, Number, Qty, OrderNumber, Date from YourTable
group by ID, Number, Qty, OrderNumber, Date
答案 1 :(得分:0)
您可以ROW_NUMBER()
使用PARTITION BY
这样的
<强> SQL Fiddle 强>
<强>查询强>
SELECT ID, Number,Qty,OrderNumber,Date
FROM
(
SELECT ID, Number,Qty,OrderNumber,Date,ROW_NUMBER()OVER(PARTITION BY Number, orderNumber ORDER BY ID ) as rn
FROM yourTable
)yourTable
WHERE rn = 1
示例数据
CREATE TABLE yourTable
([ID] varchar(7), [Number] varchar(6), [Qty] int, [OrderNumber] int, [Date] datetime);
INSERT INTO yourTable
([ID], [Number], [Qty], [OrderNumber], [Date])
VALUES
('456-98A', '746-96', 0.1, 00, '2015-01-01 00:00:00'),
('456-98A', '746-96', 0.1, 00, '2015-01-01 00:00:00'),
('456-98A', '746-96', 0.1, 00, '2015-01-01 00:00:00'),
('456-98A', '746-96', 0.1, 00, '2015-01-01 00:00:00'),
('456-98A', '321-96', 0.3, 05, '2015-01-01 00:00:00'),
('456-98A', '321-96', 0.3, 05, '2015-01-01 00:00:00');
<强>输出强>
ID Number Qty OrderNumber Date
456-98A 321-96 0 5 2015-01-01 00:00:00.000
456-98A 746-96 0 0 2015-01-01 00:00:00.000
答案 2 :(得分:0)
如果您可以使用临时表,则可以执行以下操作:
MeasureUnit
并获得正确的行:
CREATE TABLE #tempo
([rowNum] identity, [ID] varchar(7), [Number] varchar(6), [Qty] int, [OrderNumber] int, [Date] datetime);
INSERT INTO #tempo ([ID], [Number], [Qty], [OrderNumber], [Date])
SELECT [ID], [Number], [Qty], [OrderNumber], [Date] FROM yourtable