使用MIN功能挣扎。需要使用最小值获取行上的其他值。换句话说,我有一个父项,一个子项和一个数量。我需要一个父项,子项和子项的数量。
Parent Child Value
A AB 1
A BC 2
A CD 3
B AB 4
B BC 5
B EE 6
C AB 2
C EE 4
查询应该返回结果
Parent Child Value
A AB 1
B AB 4
C EE 4
AB可以复制(因为它对父母来说是唯一的)。我的'group by'没有用,我怀疑我需要使用over by子句,可能是分区...
下面的SQL不能100%运行。我认为Min_Qty是正确的,但是Child是随机的,而不是与Qty相关的孩子并且得到太多的行结果。
SELECT Parent,
Child,
MIN(Qty) OVER (PARTITION BY Child) AS Min_Qty
FROM #Temp
GROUP BY Parent, Child, Qty
答案 0 :(得分:1)
如前所述,您可以使用窗口功能并指定按数量排序的行号。然后获取所有RowNum = 1。
<强> RexTester Demo 强>
;WITH cte AS (
SELECT
*
, ROW_NUMBER() OVER (PARTITION BY Parent ORDER BY Qty ASC) AS RowNum
FROM YourTable
)
SELECT
Parent
, Child
, Qty
FROM cte WHERE rownum = 1
答案 1 :(得分:0)
您也可以进行简单的自我加入
declare @tmp table
(
parent char(1),
child char(2),
age smallint
);
insert into @tmp VALUES('A', 'AB', 1);
insert into @tmp VALUES('A', 'BC', 2);
insert into @tmp VALUES('A', 'CD', 3);
insert into @tmp VALUES('B', 'AB', 4);
insert into @tmp VALUES('B', 'BC', 5);
insert into @tmp VALUES('B', 'EE', 6);
insert into @tmp VALUES('C', 'AB', 6);
insert into @tmp VALUES('C', 'EE', 4);
SELECT t.parent, t.child, t.age from @tmp t INNER JOIN
(SELECT parent, Min(age) as MinAge from @tmp GROUP BY parent)
g on g.parent = t.parent and g.minage = t.age
注意我已经更改了c的数据,因此EE是所选的。根据您的数据,您也可获得AB for C!