SQL server,在表中查找不同的组
我有一张桌子SQL server,在表中查找不同的组,sql,group-by,distinct,relational-division,Sql,Group By,Distinct,Relational Division,我有一张桌子 prdID item percentage 1 10 50 1 20 50 2 10 50 2 20 50 3 20 30 3 20 70 4 10 50 4 20 30 4 30 20 5
prdID item percentage
1 10 50
1 20 50
2 10 50
2 20 50
3 20 30
3 20 70
4 10 50
4 20 30
4 30 20
5 10 50
5 20 50
基本上,我想把不同的组取出来
结果集应该是
group item percentage
1 10 50
1 20 50
3 20 30
3 20 70
4 10 50
4 20 30
4 30 20
2
和5
被排除在结果之外,因为它们包含与1
完全相同的项目/百分比
值。我想这是您想要的查询:
SELECT MIN(prdId) AS group, item, percentage
FROM <tablename>
GROUP BY item, percentage
(我认为您在示例输出中犯了一个小错误,包括了另外两个4。它们的(项目,百分比)值与组1和组3重复)
在哪一组上不同?为什么第1、3和4组在结果集中表示,而不是第2和第5组?基本上,产品1、2、5具有相同的组成。所以它们是重复的。所以我只需要prd 1为什么返回产品1,为什么不返回2或5?您是否需要某种排序来决定返回哪些重复组?另外,我们需要知道您使用的是哪个数据库引擎,因为任何答案都可能使用特定于引擎的SQL特性。
group item percentage
1 10 50
1 20 50
3 20 30
3 20 70
4 30 20
select *
from table_name t
inner join (
select min(prdID) as prdID
from
(
SELECT
table_name.prdID as prdID,
STUFF((
SELECT ',' + cast(item as varchar)+'~'+cast(percentage as varchar)
FROM table_name t2
WHERE t2.prdID = table_name.prdID
FOR XML PATH (''))
,1,2,'') AS Names
FROM table_name
GROUP BY table_name.prdID
)t
group by Names)R
on t.prdID=R.prdID