我有下表:
ID,col1,col2,total
1,artist1,artist2,3
2,artist2,artist1,4
如何对列col1和col2进行分组并对总数求和,以便在这样的情况下得到:
artist1,artist2, 7
如果两行包含相同的两个值,但值位于相反的列中,我仍然喜欢两行的总和(总计),如果这有意义的话。
答案 0 :(得分:2)
大多数数据库都有open("filename", 'rb')
和var sf = new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "REPORT.IPM.Note.NDR");
var SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, sf);
var view = new ItemView(1000) {PropertySet = new PropertySet(BasePropertySet.IdOnly)};
var findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
。如果是这样,你可以这样做:
least()
对于没有的数据库,使用greatest()
很容易实现相同的逻辑。
答案 1 :(得分:0)
要通过不同(相反)列的相等来过滤行,您应该在表上使用表的INNER JOIN,并使用相反的列作为连接的条件:
select t1.col1, t1.col2 from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1;
如果您不需要所有艺术家在所有列中都相同的行对(“artist1”在col1和col2中也在两行中),那么您需要过滤掉这些情况:
select t1.col1, t1.col2 from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2;
选择所需的行后,您可以将它们的总和相加。您将获得所需的结果:
select sum(t1.total) from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2;
如果您需要显示此总数的艺术家姓名,您应该指定应该显示哪个艺术家(来自第一行或第二行或什么?)。您没有为此指定任何条件。您可以使用MIN和MAX函数或LEAST和GREATEST或任何其他多行函数。这是一个例子:
select min(t1.col1), max(t1.col2), sum(t1.total) from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2;
希望这有帮助!