Sql Return";名称“;“带值的s”;即;只有当;版本;is>;=8
很抱歉问题中的措辞太糟糕,很难正确解释 我有一张这样的桌子:Sql Return";名称“;“带值的s”;即;只有当;版本;is>;=8,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,很抱歉问题中的措辞太糟糕,很难正确解释 我有一张这样的桌子: Id Name Version 1 Chrome 38.0 2 Chrome 36.0 3 Chrome 37.0 4 Firefox 31.0 5 IE 11.0 6 IE 8.0 7 IE 7.0 仅当“版本”大于等于8.0时,我需要一个查询来返回值为“IE”的“Name” 否则不要返回版本,我希望结果是 Id Name Version 1 Ch
Id Name Version
1 Chrome 38.0
2 Chrome 36.0
3 Chrome 37.0
4 Firefox 31.0
5 IE 11.0
6 IE 8.0
7 IE 7.0
仅当“版本”大于等于8.0时,我需要一个查询来返回值为“IE”的“Name”
否则不要返回版本,我希望结果是
Id Name Version
1 Chrome null
2 Chrome null
3 Chrome null
4 Firefox null
5 IE 11.0
6 IE 8.0
如果到目前为止我的存储过程有帮助的话,它将返回我不想要的所有版本
ALTER PROCEDURE [dbo].[GetCommonBrowserCount]
@StartDate datetime = NULL,
@EndDate datetime = NULL,
@Domain varchar(255) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
[Name],
COUNT(Name) AS [Count],
[Version]
FROM
dbo.GetCommonBrowserAccessEvents
WHERE
(
@StartDate IS NULL OR [Date] > @StartDate
)
AND
(
@EndDate IS NULL OR [Date] < @EndDate
)
AND
(
@Domain IS NULL OR DomainName = @Domain
)
GROUP BY Name,
[Version]
END
ALTER过程[dbo]。[GetCommonBrowserCount]
@StartDate datetime=NULL,
@EndDate datetime=NULL,
@域varchar(255)=空
作为
开始
不计数;
挑选
[姓名],
计数(名称)为[计数],
[版本]
从…起
dbo.GetCommonBrowserAccessEvents
哪里
(
@StartDate为空或[Date]>@StartDate
)
及
(
@EndDate为空或[日期]<@EndDate
)
及
(
@域为空或DomainName=@Domain
)
按名称分组,
[版本]
结束
这可能吗?使用
案例
select id,
name,
case when name = 'IE'
then version
else null
end as version
from GetCommonBrowserAccessEvents
where not
(
name = 'IE' and cast(substring(version, 1, charindex('.', version) - 1) as int) < 8
)
选择id,
名称
名称='IE'时的大小写
然后版本
否则无效
以版本结束
从GetCommonBrowserAccessEvents
哪里没有
(
name='IE'和cast(子字符串(版本,1,charindex('.',版本)-1)为int)<8
)
限制结果集只需在WHERE
子句中添加另一个和:
AND
(
[Name] <> 'IE' OR [Version] > 8
)
(如果您使用的是SQL Server 2012或更高版本,您可以使用更简洁一点,但在2008年则不行。)这正是我的偏好。我将日期参数默认为最小值和最大值,而不是NULL。(即:@StartDate='1/1/1900'
和@EndDate='12/31/2050'
)这使得WHERE子句更易于阅读。(即:其中,[Date]介于@StartDate和@EndDate之间,并且……
)
SELECT
-- ...
CASE WHEN [Name] = 'IE' THEN [Version] ELSE NULL END AS Version
SELECT
[Name],
CASE
WHEN
[Name] = "IE" AND [Version] >= 8
THEN
[Version]
ELSE
NULL
END AS [Version]
FROM
dbo.GetCommonBrowserAccessEvents
WHERE
Name != "IE"
OR
(Name = "IE" AND Version >= 8)