sql - SQL 中 Case 列的乘法

标签 sql sql-server

我有一个查询,其中基于案例有两列,我希望乘以 Qty_Sold * UnitPrice 以获得结果

SELECT CASE 
        WHEN RPT_ITM_D.F1034 = 3
            THEN F64
        ELSE 0
        END AS Qty_Sold
    ,CASE 
        WHEN [POS_TAB].F81 = 1
            THEN Cast(CONVERT(DECIMAL(10, 3), F65 / NULLIF(F64, 0)) AS NVARCHAR) * cast(1.15 AS NUMERIC(10, 3))
        ELSE Cast(CONVERT(DECIMAL(10, 3), F65 / NULLIF(F64, 0)) AS NVARCHAR)
        END AS UnitPrice
FROM [dbo].[RPT_ITM_D]
LEFT OUTER JOIN [dbo].[POS_TAB] ON (RPT_ITM_D.F01 = POS_TAB.F01)
LEFT OUTER JOIN [dbo].SDP_TAB ON (POS_TAB.F04 = SDP_TAB.F04)
LEFT OUTER JOIN [dbo].DEPT_TAB ON (SDP_TAB.F03 = DEPT_TAB.F03)
WHERE RPT_ITM_D.F1034 IN (
        3
        ,3012
        )
    AND RPT_ITM_D.F254 = convert(VARCHAR, getdate(), 101)

我已经尝试过This Example但它不起作用。

请指教

请注意,我还需要外连接中的其他表

最佳答案

您可以尝试将 CTE 用作:

With CTE as
(SELECT CASE 
        WHEN RPT_ITM_D.F1034 = 3
            THEN F64
        ELSE 0
        END AS Qty_Sold
    ,CASE 
        WHEN [POS_TAB].F81 = 1
            THEN Cast(CONVERT(DECIMAL(10, 3), F65 / NULLIF(F64, 0)) AS NVARCHAR) * cast(1.15 AS NUMERIC(10, 3))
        ELSE Cast(CONVERT(DECIMAL(10, 3), F65 / NULLIF(F64, 0)) AS NVARCHAR)
        END AS UnitPrice
FROM [dbo].[RPT_ITM_D]
LEFT OUTER JOIN [dbo].[POS_TAB] ON (RPT_ITM_D.F01 = POS_TAB.F01)
LEFT OUTER JOIN [dbo].SDP_TAB ON (POS_TAB.F04 = SDP_TAB.F04)
LEFT OUTER JOIN [dbo].DEPT_TAB ON (SDP_TAB.F03 = DEPT_TAB.F03)
WHERE RPT_ITM_D.F1034 IN (3,3012)
    AND RPT_ITM_D.F254 = convert(VARCHAR, getdate(), 101)
)

SELECT
 (Qty_Sold * UnitPrice) AS result
FROM CTE

关于sql - SQL 中 Case 列的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234475/

相关文章:

MySQL : Getting Unknown column error

mysql - 如果没有值,则计算行数返回 1

mysql - 计数不同的值,其中另一个值的计数 = 1

c# - 如何在数据库的文本字段中存储 byte[] 并检索它

mysql - 如何将SQL Server程序转换为MySQL?

sql-server - 适用于 SQL Server 和 Oracle 的 LINQ to Entities

SQL Server 查询 "next-day changes"

mysql - 从考勤表中报告 N 次或多次连续缺席的 SQL 查询

php - WordPress 在数据库中查找和替换

sql-server - 'Employees' 不包含身份列