Sql 分组时考虑字段名称,反之亦然
请参见下面的DDL:Sql 分组时考虑字段名称,反之亦然,sql,sql-server,Sql,Sql Server,请参见下面的DDL: create table #test (name1 varchar(100), name2 varchar(100)) insert into #test values ('Marie','ian') insert into #test values ('Ian','Marie') 下面是SQL语句: select count(*) from #test group by name1,name2 这将正确返回到行: 1, 1 如何返回1行: 2 id1和id2在另一
create table #test (name1 varchar(100), name2 varchar(100))
insert into #test values ('Marie','ian')
insert into #test values ('Ian','Marie')
下面是SQL语句:
select count(*) from #test group by name1,name2
这将正确返回到行:
1,
1
如何返回1行:
2
id1和id2在另一方面是相同的,因此应将它们视为一行。我相信这可能与校验和有关,但我不确定。试试:
SELECT COUNT(*)
FROM #test
GROUP BY IIF(name1 >= name2, name1, name2), IIF(name1 < name2, name1, name2)
这样,像
('Bob','Martin')
和('Martin','Bob')
这样的配对被GROUP by
子句视为相同。感谢您的帮助。然而,我并不期待这样的回答。我已修正这项质询。一些有问题的领域是varchars。抱歉。@w0051977天气字段是int
或varchar
并不重要。解决方案仍然有效。我同意@GiorgosBetsos的观点,他有一个非常好、高效的解决方案。我唯一的建议是,您要么确保name1
和name2
不能null
,要么确保null
值在CASE
语句中得到考虑。IIF对我来说是一个新概念,我会发现它非常有用+1.
SELECT COUNT(*)
FROM #test
GROUP BY CASE WHEN name1 >= name2 THEN name1 ELSE name2 END,
CASE WHEN name1 < name2 THEN name1 ELSE name2 END