仅对查询中的多个位置单次调用函数

时间:2014-01-03 07:35:37

标签: sql sql-server

SQL查询

SELECT
    dbo.TotalPackagedQty(t1.int_PackingListDetailId),
    float_Quantity,
    int_PackingListDetailId
        CASE
            WHEN dbo.TotalPackagedQty(t1.int_PackingListDetailId) = 0 THEN 1
            WHEN dbo.TotalPackagedQty(t1.int_PackingListDetailId) < float_Quantity THEN 2
            WHEN dbo.TotalPackagedQty(t1.int_PackingListDetailId) = float_Quantity THEN 3
        END
FROM tblSdPackingListDetail t1
WHERE int_PackingId = '10901032014121313496PM0'

这是一个SQL查询。

我正在使用名为dbo.TotalPackagedQty(t1.int_PackingListDetailId)的函数。

我在查询中使用此功能4次。输出正确,但我想只调用此函数一次以提高查询速度。

请在查询而非存储过程或其他事项中建议我更好的选择。

2 个答案:

答案 0 :(得分:7)

试试这个 -

SELECT
    value,
    float_Quantity,
    int_PackingListDetailId =
                CASE
                    WHEN value = 0 THEN 1
                    WHEN value < float_Quantity THEN 2
                    WHEN value = float_Quantity THEN 3
                END
FROM dbo.tblSdPackingListDetail t1
CROSS APPLY (
    SELECT value = dbo.TotalPackagedQty(t1.int_PackingListDetailId)
) tt
WHERE int_PackingId = '10901032014121313496PM0'

答案 1 :(得分:-1)

声明变量并尝试

DECLARE @totalPackagedQty int;
set @totalPackagedQty=dbo.TotalPackagedQty(t1.int_PackingListDetailId);
然后在所有地方使用totalPackagedQty而不是函数调用。