我创建了下表
create table publisher(
name varchar(20),
city varchar(20)
)我想运行以下要求:
列出所有的职位的字符'a‘的名字。
为此,Ii运行以下查询:
select patindex('%a%', name)
from publisher;但是,它没有显示出适当的输出。当我把'city‘列而不是'name’列放在‘name’列时,它显示了正确的输出。有什么问题吗?
此外,我想显示出版商的名称,其获得最低和最大的利润。为此,我运行了以下查询:
select name, max(profit), min(profit)
from publisher;它显示了"'name‘不是聚合函数的一部分“这样的错误。我应该做些什么来检索那些获得最低和最大利润的出版商的名字。
发布于 2011-03-01 17:51:19
列出所有的职位的字符'a‘的名字。
要做到这一点,您需要一个数字或计数表。如果使用的是Server 2005或更高版本,则可以使用公共表表达式对其进行模拟:
With Numbers As
(
Select 1 As Value
Union All
Select Value + 1
From Numbers
Where Value <= 100 --replace with max size of Publisher Name
)
Select P.Name, N.Value
From Numbers As N
Cross Join Publishers As P
Where Substring( P.Name, N.Value, 1 ) = 'a'
Option ( Maxrecursion 0);此外,我想显示出版商的名称,其获得最低和最大的利润。
With ProfitRanks As
(
Select Name
, Rank() Over ( Order By Profit Asc ) As LowestProfitRnk
, Rank() Over ( Order By Profit Desc ) As HighestProfitRnk
From Publisher
)
Select Name, Profit
From ProfitRanks
Where LowestProfitRnk = 1
Or HighestProfitRnk = 1发布于 2011-03-01 17:39:17
第二个问题需要由以下几个方面组成:
按名称从发行者组中选择名称、最大值(利润)、最小(利润)
发布于 2011-03-01 17:41:30
对于问题的第2部分,假设profit上有一个索引,我会使用。
select name,
profit
FROM (SELECT TOP(1) with ties name,
profit
FROM publisher
ORDER BY profit) mx
UNION
select name,
profit
FROM (SELECT TOP(1) with ties name,
profit
FROM publisher
ORDER BY profit DESC) mn 这是可以满足的,两个指数寻求一个在开始和一个在指数的末尾。
https://stackoverflow.com/questions/5157793
复制相似问题