Sql server 2005 sql联合问题
在这个SQL代码中Sql server 2005 sql联合问题,sql-server-2005,Sql Server 2005,在这个SQL代码中 DECLARE @n tinyint WHILE (@n > 0) BEGIN SELECT @n AS 'Number' ,CASE WHEN (@n % 2) = 1 THEN 'EVEN' ELSE 'ODD' END AS 'Type' SET @n = @n - 1 END 我怎样才能将union子句放在这个结果集中,才能将结果显示在一个结果集中
DECLARE @n tinyint
WHILE (@n > 0)
BEGIN
SELECT @n AS 'Number'
,CASE
WHEN (@n % 2) = 1
THEN 'EVEN'
ELSE 'ODD'
END AS 'Type'
SET @n = @n - 1
END
我怎样才能将union子句放在这个结果集中,才能将结果显示在一个结果集中?您可以这样做:
DECLARE @n TINYINT
SET @n = 100
SELECT number,
CASE WHEN (number % 2) = 1 THEN 'EVEN' ELSE 'ODD' END AS 'Type'
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY number) AS number
FROM master..spt_values
) t
WHERE number < @n
请尝试以下操作:
DECLARE @n TINYINT
DECLARE @sql VARCHAR(max)
SET @sql=''
SET @n=10
WHILE (@n > 0)
BEGIN
SET @sql=@sql+' SELECT '+CONVERT(VARCHAR(50) ,@n)+' AS ''Number''
,CASE
WHEN ('+CONVERT(VARCHAR(50) ,@n)+' % 2) = 1
THEN ''ODD''
ELSE ''EVEN''
END AS TYPE '
IF @n>1 SET @sql=@sql+' Union '
SET @n = @n - 1
END
EXEC( @sql)
你甚至可以试试这个
DECLARE @n tinyint
declare @tbl table(number tinyint,NumberType varchar(10))
set @n = 10
WHILE (@n > 0)
BEGIN
insert into @tbl
SELECT @n AS 'Number'
,CASE
WHEN (@n % 2) = 0
THEN 'EVEN'
END AS 'Type'
UNION
SELECT @n AS 'Number'
,CASE
WHEN (@n % 2) <> 0
THEN 'ODD'
END AS 'Type'
SET @n = @n - 1
END
select * from @tbl where NumberType is not null
但是你真正想要实现什么呢?重新思考你的问题更容易。分秒必争 首先生成一组数字。 然后将这组数字分类为偶数或奇数
declare @numberCount int
set @numberCount = 10;
with numbers as
(
select 1 as number
union all
select number + 1 from numbers where number < @numberCount
)
select number,
case
when (number % 2) = 1
then 'EVEN'
else 'ODD'
end AS 'Type'
from numbers option(maxrecursion 10000)
为了对基于集合的处理的热爱。。。你不需要一个while循环!
declare @numberCount int
set @numberCount = 10;
with numbers as
(
select 1 as number
union all
select number + 1 from numbers where number < @numberCount
)
select number,
case
when (number % 2) = 1
then 'EVEN'
else 'ODD'
end AS 'Type'
from numbers option(maxrecursion 10000)