Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分组时考虑字段名称,反之亦然_Sql_Sql Server - Fatal编程技术网

Sql 分组时考虑字段名称,反之亦然

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在另一

请参见下面的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在另一方面是相同的,因此应将它们视为一行。我相信这可能与校验和有关,但我不确定。

试试:

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