0

I need to create a table function that produces a parameter up to a specified number in column 1 always starting from 1. In column 2, if column 1 is divisible by 5 it will say 'Div5' otherwise NULL.

So as an example. I specify column 1 will stop at 5 the end result will look as follows;

1 NULL

2 NULL

3 NULL

4 NULL

5 Div5

I can create the function, but I'm not sure how to create the conditional first column, or how to say if column 2 divided by 5 is an integer then 'Div5' if it's a decimal then NULL;

create function MyFunction ()

Returns @Division Table 

(Ind int , 
Div5 varchar(30))

AS
begin
Insert Into @Division (Ind, Div5)

select ???,???

Return;
End;

I hope this gives enough detail?

Thank you :)

4

2 回答 2

1

这应该可以解决问题:

DECLARE @divisor INT = 10, @limit INT = 100;

WITH
              L0   AS(SELECT 1 AS C UNION ALL SELECT 1 AS O),
              L1   AS(SELECT 1 AS C FROM L0 AS A CROSS JOIN L0 AS B),
              L2   AS(SELECT 1 AS C FROM L1 AS A CROSS JOIN L1 AS B),
              L3   AS(SELECT 1 AS C FROM L2 AS A CROSS JOIN L2 AS B),
              L4   AS(SELECT 1 AS C FROM L3 AS A CROSS JOIN L3 AS B),
              L5   AS(SELECT 1 AS C FROM L4 AS A CROSS JOIN L4 AS B),
              Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS N FROM L5)
    SELECT N, CASE WHEN N % @divisor = 0 THEN 'Div' + CAST(@divisor AS VARCHAR(100)) ELSE NULL END AS Col2  FROM Nums 
    WHERE N <= @limit

这 2 个变量确定您要查找的第一列可被除以的数字,第二个变量确定您想要走多远,下一位只是 CTE,用于生成第一列的数字(数字表非常有用对于大量这样的东西)。然后它只是从数字表中选择所有数字直到您的限制和一个 case 表达式来检查它是否可以被您指定的数字(余数 0)和 DivX 位的一些字符串连接整除。

您应该能够轻松地将这个逻辑集成到您的函数中。

于 2016-02-12T17:10:45.327 回答
0

您正在寻找基本上返回除法问题剩余部分的模运算符。

DECLARE @SOMETBL TABLE (ROWNUM INT, DIVSTATUS CHAR(4))

INSERT @SOMETBL
(ROWNUM)
SELECT 1
UNION
SELECT 5
UNION
SELECT 2
UNION
SELECT 10

UPDATE @SOMETBL
SET DIVSTATUS = CASE WHEN ROWNUM%5 > 0 THEN NULL ELSE 'DIV5' END 

SELECT * FROM @SOMETBL
于 2016-02-12T17:20:42.430 回答