表值函数作为参数传递以在case语句内生成输出

米塔利·纳斯(Mitali Nath)

我的数据集如下所示

SQL Server 2012。

DECLARE @ELECTRONICS TABLE
(
    RESISTORID INT, 
    CAPACITORID VARCHAR(10),    
    VOLT  DECIMAL(6,2), 
    WATT  INT,  
    PASSIVENUMBER INT    
) 

INSERT @ELECTRONICS
SELECT 100, 'TH',   1.2,    5,  93 UNION ALL
SELECT 200, 'TH',   1.2,    5,  93 UNION ALL
SELECT 300, 'TH',   1.5,    5,  93 UNION ALL
SELECT 100, 'TH',   -2.9,   5,  93 UNION ALL
SELECT 500, 'RT',   3.3,    5,  93 UNION ALL
SELECT 540, 'TH',   0,      5,  93 UNION ALL
SELECT 540, 'SN',   3.3,    5,  93 UNION ALL
SELECT 540, 'UL',   4.2,    5,  93 UNION ALL
SELECT 800, 'TH',   -2.4,   5,  93 UNION ALL
SELECT 300, 'RN',   2.2,    4,  35 UNION ALL
SELECT 300, 'RN',   2.5,    6,  35 UNION ALL
SELECT 100, 'RN',   1.2,    9,  35 UNION ALL
SELECT 200, 'RN',   1.2,    9,  35 UNION ALL
SELECT 300, 'RN',   1.5,    9,  35 UNION ALL
SELECT 100, 'RN',   -2.9,   9,  35 UNION ALL
SELECT 800, 'RN',   -2.4,   9,  31

我试图写一个表值UDF,它接受一个参数,@PASSIVENUMBER以及生成价值POWERTHRESHOLDRESISTORID基础上,CAPACITORIDVOLTWATT

在下面的SQL代码中使用的函数。

SELECT *, CASE WHEN RESISTORID IN ('100','540') THEN 'A03' ELSE 'A01' END AS RESISTORID,
    CASE WHEN CAPACITORID = 'TH' AND VOLT >0 THEN (VOLT * 1000) 
    WHEN CAPACITORID = 'TH' AND VOLT = 0 THEN (WATT * 1000)
    WHEN CAPACITORID <> 'TH' AND VOLT >0 THEN VOLT
    ELSE WATT END AS POWERTHRESHOLD
FROM @ELECTRONICS
WHERE PASSIVENUMBER = 93

SELECT * ,CASE WHEN RESISTORID IN ('300','800') THEN 'B03' ELSE 'B01' END AS RESISTORID,
    CASE WHEN CAPACITORID = 'RN' AND VOLT >0 THEN (VOLT * 10*3/56) 
    WHEN CAPACITORID = 'RN' AND VOLT = 0 THEN (WATT * 100*2/21)
    WHEN CAPACITORID <> 'RN' AND VOLT >10 THEN VOLT
    ELSE WATT END AS POWERTHRESHOLD
FROM @ELECTRONICS
WHERE PASSIVENUMBER = 35

当PASSIVENUMBER = 93时输出

RESISTORID  CAPACITORID VOLT    WATT    PASSIVENUMBER   RESISTORID  POWERTHRESHOLD
100 TH  1.20    5   93  A03 1200.00
200 TH  1.20    5   93  A01 1200.00
300 TH  1.50    5   93  A01 1500.00
100 TH  -2.90   5   93  A03 5.00
500 RT  3.30    5   93  A01 3.30
540 TH  0.00    5   93  A03 5000.00
540 SN  3.30    5   93  A03 3.30
540 UL  4.20    5   93  A03 4.20
800 TH  -2.40   5   93  A01 5.00

当PASSIVENUMBER = 35时输出

RESISTORID  CAPACITORID VOLT    WATT    PASSIVENUMBER   RESISTORID  POWERTHRESHOLD
300 RN  2.20    4   35  B03 2200.00
300 RN  2.50    6   35  B03 2500.00
100 RN  1.20    9   35  B01 1200.00
200 RN  1.20    9   35  B01 1200.00
300 RN  1.50    9   35  B03 1500.00
100 RN  -2.90   9   35  B01 9.00

如何实现使用case语句检查值的函数。

我尝试过的代码无法提供适当的结果。

CREATE FUNCTION [dbo].[fnchkID]
(
    @PASSIVENUMBER INT
)
RETURNS INT
AS
BEGIN
    RETURN
        CASE 
            WHEN CAPACITORID = RN and @VOLT>0 THEN VOLT * 1000
            
            ELSE WATT from @ELECTRONICS
        END 
END

请分享您的想法。

戴尔K

创建函数的文档非常详尽,因此应该以您为起点,因为他们有许多示例可以帮助您入门。

我建议使用内联表值函数,因为它们的性能通常比多语句表值函数好得多

CREATE FUNCTION [dbo].[fnchkID]
(
    @PASSIVENUMBER INT
)
RETURNS TABLE
RETURN
    SELECT RESISTORID, CAPACITORID, VOLT, WATT, PASSIVENUMBER
        , CASE WHEN RESISTORID IN ('100','540') THEN 'A03' ELSE 'A01' END AS NEWRESISTORID
        , CASE WHEN PASSIVENUMBER = 93 THEN
            CASE WHEN CAPACITORID = 'TH' AND VOLT > 0 THEN (VOLT * 1000) 
            WHEN CAPACITORID = 'TH' AND VOLT = 0 THEN (WATT * 1000)
            WHEN CAPACITORID <> 'TH' AND VOLT > 0 THEN VOLT
            ELSE WATT END
        WHEN PASSIVENUMBER = 35 THEN
            CASE WHEN CAPACITORID = 'RN' AND VOLT >0 THEN (VOLT * 10*3/56) 
            WHEN CAPACITORID = 'RN' AND VOLT = 0 THEN (WATT * 100*2/21)
            WHEN CAPACITORID <> 'RN' AND VOLT >10 THEN VOLT
            ELSE WATT END
        END AS POWERTHRESHOLD
    FROM @ELECTRONICS
    WHERE PASSIVENUMBER = @PASSIVENUMBER;

注意:您计算出的列不能与现有列具有相同的名称,因此不能NEWRESISTORID使用RESISTORID

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用select语句在表值函数中传递参数

来自分类Dev

在R中将if语句作为函数参数传递

来自分类Dev

在R中将if语句作为函数参数传递

来自分类Dev

函数中传递的右值作为参数被视为函数内的左值?

来自分类Dev

函数中传递的右值作为参数被视为函数内的左值?

来自分类Dev

标量传递值到函数作为参数

来自分类Dev

在“ using语句”中将代码作为参数传递给函数

来自分类Dev

将哈希表作为参数传递给PowerShell中的函数

来自分类Dev

将表作为参数传递给Lua中的函数

来自分类Dev

将值列表作为参数传递给R中的函数

来自分类Dev

在Javascript构造函数中将键/值对象作为参数传递

来自分类Dev

将值作为函数参数传递与两次计算?

来自分类Dev

将HTML输入值作为JavaScript函数参数传递

来自分类Dev

将输入元素的值作为参数传递给viewmodel函数

来自分类Dev

如何将多个枚举值作为函数参数传递

来自分类Dev

C ++更改作为函数参数传递的指针值

来自分类Dev

将向量数组作为函数参数传递以更改原始值

来自分类Dev

将函数作为参数传递给模板返回值

来自分类Dev

如何将多个列表值作为函数参数传递?

来自分类Dev

将pandas列的值作为函数中的单独参数传递

来自分类Dev

返回作为参数传递给函数的右值引用

来自分类Dev

将结果集值作为js函数中的参数传递

来自分类Dev

在Javascript构造函数中将键/值对象作为参数传递

来自分类Dev

仅将非 None 值作为参数传递给函数

来自分类Dev

将此和逗号分隔的值作为参数传递给函数

来自分类Dev

以不同的方式传递参数,函数仍应输出相同的值

来自分类Dev

在不带“ call”功能的情况下,在Lua 4中将表值作为函数参数传递

来自分类Dev

如何在javascript函数内创建Web链接,并将单元格值作为参数传递给Servlet?

来自分类Dev

传递匿名函数作为参数

Related 相关文章

  1. 1

    使用select语句在表值函数中传递参数

  2. 2

    在R中将if语句作为函数参数传递

  3. 3

    在R中将if语句作为函数参数传递

  4. 4

    函数中传递的右值作为参数被视为函数内的左值?

  5. 5

    函数中传递的右值作为参数被视为函数内的左值?

  6. 6

    标量传递值到函数作为参数

  7. 7

    在“ using语句”中将代码作为参数传递给函数

  8. 8

    将哈希表作为参数传递给PowerShell中的函数

  9. 9

    将表作为参数传递给Lua中的函数

  10. 10

    将值列表作为参数传递给R中的函数

  11. 11

    在Javascript构造函数中将键/值对象作为参数传递

  12. 12

    将值作为函数参数传递与两次计算?

  13. 13

    将HTML输入值作为JavaScript函数参数传递

  14. 14

    将输入元素的值作为参数传递给viewmodel函数

  15. 15

    如何将多个枚举值作为函数参数传递

  16. 16

    C ++更改作为函数参数传递的指针值

  17. 17

    将向量数组作为函数参数传递以更改原始值

  18. 18

    将函数作为参数传递给模板返回值

  19. 19

    如何将多个列表值作为函数参数传递?

  20. 20

    将pandas列的值作为函数中的单独参数传递

  21. 21

    返回作为参数传递给函数的右值引用

  22. 22

    将结果集值作为js函数中的参数传递

  23. 23

    在Javascript构造函数中将键/值对象作为参数传递

  24. 24

    仅将非 None 值作为参数传递给函数

  25. 25

    将此和逗号分隔的值作为参数传递给函数

  26. 26

    以不同的方式传递参数,函数仍应输出相同的值

  27. 27

    在不带“ call”功能的情况下,在Lua 4中将表值作为函数参数传递

  28. 28

    如何在javascript函数内创建Web链接,并将单元格值作为参数传递给Servlet?

  29. 29

    传递匿名函数作为参数

热门标签

归档