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 需要了解SELECT查询的帮助吗_Sql_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

Sql 需要了解SELECT查询的帮助吗

Sql 需要了解SELECT查询的帮助吗,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我有一个问题。它只使用Northwind数据库中的一个表Customers。 我完全不知道它是如何工作的,它的意图是什么。我希望这里有很多DBA,所以我要求解释一下。特别是不知道OVER和PARTITION在这里做什么 WITH NumberedWomen AS ( SELECT CustomerId ,ROW_NUMBER() OVER ( PARTITION BY c.Country ORDE

我有一个问题。它只使用Northwind数据库中的一个表Customers。 我完全不知道它是如何工作的,它的意图是什么。我希望这里有很多DBA,所以我要求解释一下。特别是不知道OVER和PARTITION在这里做什么

WITH NumberedWomen AS
(
    SELECT CustomerId ,ROW_NUMBER() OVER 
            (
                PARTITION BY c.Country 
                ORDER BY LEN(c.CompanyName) ASC
            ) 
                women 
                FROM Customers c
)

SELECT * FROM NumberedWomen WHERE women > 3 
如果您需要db模式,则此函数:

ROW_NUMBER() OVER (PARTITION BY c.Country ORDER BY LEN(c.CompanyName) ASC) 
将连续行号指定给每个国家/地区内的记录,并按LENcompanyName对记录进行排序

如果您有这些数据:

country   companyName
US        Apple
US        Google
UK        BAT
UK        BP
US        GM
,然后查询将从1到3的数字分配给美国公司,从1到2的数字分配给英国公司,并按名称长度排序:

country   companyName   ROW_NUMBER()
US        GM            1
US        Apple         2
US        Google        3
UK        BP            1
UK        BAT           2
此功能:

ROW_NUMBER() OVER (PARTITION BY c.Country ORDER BY LEN(c.CompanyName) ASC) 
将连续行号指定给每个国家/地区内的记录,并按LENcompanyName对记录进行排序

如果您有这些数据:

country   companyName
US        Apple
US        Google
UK        BAT
UK        BP
US        GM
,然后查询将从1到3的数字分配给美国公司,从1到2的数字分配给英国公司,并按名称长度排序:

country   companyName   ROW_NUMBER()
US        GM            1
US        Apple         2
US        Google        3
UK        BP            1
UK        BAT           2
行数是一个排名函数

OVER告诉它如何创建排名数字

PARTITION BY[expression]告诉ROW_NUMBER函数在[expression]包含新值时重新开始排序

在您的情况下,对于每个国家,都会创建一系列以1开头的数字。在一个国家内,公司按其名称的长度排序。较短的名称=较低的级别

最后一个问题是:

从NumberedWomen中选择*,其中women>3

选择所有客户,除非公司国家/地区组合是同一国家/地区中具有3个最短名称的其中一个公司的一部分。

行号是一个排名函数

OVER告诉它如何创建排名数字

PARTITION BY[expression]告诉ROW_NUMBER函数在[expression]包含新值时重新开始排序

在您的情况下,对于每个国家,都会创建一系列以1开头的数字。在一个国家内,公司按其名称的长度排序。较短的名称=较低的级别

最后一个问题是:

从NumberedWomen中选择*,其中women>3


选择所有客户,除非公司国家/地区组合是同一国家/地区中具有3个最短名称的公司之一。

公司名称的长度与女性有什么关系?谁会给他们编号?@sjngm不知道,不是我的代码。开发商一定很无聊。公司名称的长度与女性有什么关系?谁会给他们编号?@sjngm不知道,不是我的代码。开发商一定很无聊。