AIM:简单程序;当我的变量被分成3时,它返回单词'the'',当它被分成5时它返回'hop',当它被分成3& 5同时它返回两个单词。
DECLARE @Zmienna AS INT
SET @Zmienna = 0
WHILE @Zmienna < 999
BEGIN
PRINT @Zmienna +
CASE
WHEN @Zmienna/3=% THEN ' hip'
WHEN @Zmienna/5=% THEN ' hop'
END
SET @Zmienna = @Zmienna + 1
END
错误
ERROR: Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'THEN'.
Msg 102, Level 15, State 1, Line 12
Incorrect syntax near 'END'.
有什么想法吗?
答案 0 :(得分:6)
我会使用模数的其余部分(就像你尝试过的那样)并连接两个case语句(否则如果两个条件都为真,你将永远不会获得hiphop
)。您还需要else ''
,否则您可以获得null
值:
CASE
WHEN @Zmienna % 3 = 0
THEN ' hip'
ELSE ''
END
+
CASE
WHEN @Zmienna % 5 = 0
THEN ' hop'
ELSE ''
END
提示:如果你想要一个空格或其他文本,如果两个条件都是true
,你必须在case语句中使用and
:
CASE
WHEN @Zmienna % 3 = 0 and @Zmienna % 5 = 0
THEN ' hip hop'
WHEN @Zmienna % 3 = 0
THEN ' hip'
WHEN @Zmienna % 5 = 0
THEN ' hop'
END
答案 1 :(得分:2)
试试这个:
DECLARE @Zmienna AS INT
SET @Zmienna = 0
WHILE @Zmienna < 999
BEGIN
PRINT CAST(@Zmienna as varchar) +
CASE
when (@Zmienna%3=0 AND @Zmienna%5=0) THEN ' hip hop'
WHEN @Zmienna%3=0 THEN ' hip'
WHEN @Zmienna%5=0 THEN ' hop'
END
SET @Zmienna = @Zmienna + 1
END
答案 2 :(得分:1)
试试这个,它只会给你一个数据集而不是999,以获得更好的性能和可读性。
Print只能处理1个值,而是可以选择1中的所有行并在不同的列中显示值而不是将它们连接起来:
;WITH CTE as
(
SELECT 0 Zmienna
UNION ALL
SELECT Zmienna + 1
FROM CTE
WHERE Zmienna < 998 -- i wonder why you don't want to include 999
)
SELECT
Zmienna,
CASE
WHEN Zmienna % 15 = 0 THEN 'hiphop'
WHEN Zmienna % 3 = 0 THEN 'hip'
WHEN Zmienna % 5 = 0 THEN 'hop'
END as Hippityhop
FROM CTE
OPTION (maxrecursion 0)
答案 3 :(得分:0)
您可以使用IF
声明
DECLARE @Zmienna AS INT
SET @Zmienna = 0
WHILE @Zmienna < 999
BEGIN
if (@Zmienna % 3) = 0 and (@Zmienna % 5) = 0
BEGIN
PRINT convert(varchar(10),@Zmienna)+ ' hip'+' '+'hop'
END
ELSE
BEGIN
if (@Zmienna % 3) = 0
BEGIN
PRINT convert(varchar(10),@Zmienna)+' hip'
END
if (@Zmienna % 5) = 0
BEGIN
select convert(varchar(10),@Zmienna)+' hop'
END
END
SET @Zmienna = @Zmienna + 1
END
答案 4 :(得分:0)
这似乎是最简单的答案:
DECLARE @Zmienna AS INT SET @Zmienna = 0
WHILE @Zmienna&lt; 999 开始 PRINT CAST(@Zmienna as varchar)+ 案件 什么时候(@ Zmienna%3 = 0和@ Zmienna%5 = 0)然后'嘻哈' 当@ Zmienna%3 = 0那么'时髦' 当@ Zmienna%5 = 0那么'跳' ELSE''
END
SET @Zmienna = @Zmienna + 1
END