Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server SQL中带有Where子句的GROUPBY_Sql Server - Fatal编程技术网

Sql server SQL中带有Where子句的GROUPBY

Sql server SQL中带有Where子句的GROUPBY,sql-server,Sql Server,在groupby中使用DateTime列时,结果有所不同。有人能解释一下原因吗 查询: Select Name, Source, Description, CreatedDate From testTable Where Source like '%Validating err%' And CreatedDate >='2016-12-01' Group By Name , Source, Description, CreatedDate Select Nam

在groupby中使用DateTime列时,结果有所不同。有人能解释一下原因吗

查询:

Select Name, Source, Description, CreatedDate
   From testTable
   Where Source like '%Validating err%' 
   And CreatedDate >='2016-12-01'
   Group By Name , Source, Description, CreatedDate 
Select Name, Source, Description
   From testTable
   Where Source like '%Validating err%' 
   And CreatedDate >='2016-12-01'
   Group By Name , Source, Description
结果:15行

上面的查询返回了大约15个结果。但是当我从groupby子句中删除CreatedDate列时,它只返回4个结果

查询:

Select Name, Source, Description, CreatedDate
   From testTable
   Where Source like '%Validating err%' 
   And CreatedDate >='2016-12-01'
   Group By Name , Source, Description, CreatedDate 
Select Name, Source, Description
   From testTable
   Where Source like '%Validating err%' 
   And CreatedDate >='2016-12-01'
   Group By Name , Source, Description

结果:4行

我添加这个答案只是为了@John的利益,这样他可以直观地理解为什么他的两个结果集有不同数量的记录

想象一下一张叫做shirts的桌子,它只有两列,大小和颜色。以下是一些示例数据:

size | color
S    | red
S    | green
S    | blue
M    | red
M    | green
M    | blue
L    | red
L    | green
L    | blue
换句话说,衬衫有三种尺寸,每种尺寸有三种可能的颜色

现在,如果执行以下查询:

SELECT size
FROM shirts
GROUP BY size
您将返回三条记录,其中仅包含三种大小。但是,如果您执行以下操作:

SELECT size, color
FROM shirts
GROUP BY size, color

然后你会得到九张唱片,或是九组唱片。这里发生的一切是,添加另一列会创建新的可能的组组合,从而创建更多的组。同样的概念也适用于你在两个查询中看到的内容。

我添加这个答案只是为了@John的利益,这样他可以直观地理解为什么他的两个结果集有不同数量的记录

想象一下一张叫做shirts的桌子,它只有两列,大小和颜色。以下是一些示例数据:

size | color
S    | red
S    | green
S    | blue
M    | red
M    | green
M    | blue
L    | red
L    | green
L    | blue
换句话说,衬衫有三种尺寸,每种尺寸有三种可能的颜色

现在,如果执行以下查询:

SELECT size
FROM shirts
GROUP BY size
您将返回三条记录,其中仅包含三种大小。但是,如果您执行以下操作:

SELECT size, color
FROM shirts
GROUP BY size, color

然后你会得到九张唱片,或是九组唱片。这里发生的一切是,添加另一列会创建新的可能的组组合,从而创建更多的组。同样的概念也适用于您在两个查询中看到的内容。

您使用>=而不是=筛选日期,因此这是显而易见的。另外,您的第二个查询还有CreatedDate,我认为这是一个typo@Prdp这些查询不应该在SQL Server中运行吗?也许在MySQL中。@TimBiegeleisen-我认为这是打字错误。。OP说查询正在返回记录这一点也不奇怪。有4个独特的组,由名称、来源、描述组成。添加日期列时,会创建更多组合,因此会有更多的组。@John-如果您希望两个查询产生相同数量的记录,只需将>=更改为=else,正如@tim在前面的评论中所提到的,很明显您现在已从组中删除了日期组较小您正在使用>=而不是=筛选日期,所以这很明显。另外,您的第二个查询还有CreatedDate,我认为这是一个typo@Prdp这些查询不应该在SQL Server中运行吗?也许在MySQL中。@TimBiegeleisen-我认为这是打字错误。。OP说查询正在返回记录这一点也不奇怪。有4个独特的组,由名称、来源、描述组成。当您添加“日期”列时,这将创建更多的组合,从而创建更多的组。@John-如果您希望两个查询产生相同数量的记录,只需将>=更改为=else,正如@tim在前面的注释中所提到的,很明显,您已从组中删除了日期,此时组较小