Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MSSQL上使用减法运算符在单个列上查询两个不同的求和函数_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

如何在MSSQL上使用减法运算符在单个列上查询两个不同的求和函数

如何在MSSQL上使用减法运算符在单个列上查询两个不同的求和函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张表LG\u 060\u CLCARD和LG\u 060\u 04\u STFICHE。第一个表具有按LOGICALREF列排序的客户机信息。我想按照一些标准显示所有客户的销售金额(从表TotalDiscounting列)。有些挣扎我是无法实现的。以下是我的sql代码: SELECT CL.LOGICALREF, (ISNULL (IRS04.TOTALDISCOUNTED,0)) AS TOTALDISCOUNTED, FROM LG_060_CLCARD CL LEFT

我有两张表
LG\u 060\u CLCARD
LG\u 060\u 04\u STFICHE
。第一个表具有按LOGICALREF列排序的客户机信息。我想按照一些标准显示所有客户的销售金额(从表TotalDiscounting列)。有些挣扎我是无法实现的。以下是我的sql代码:

SELECT CL.LOGICALREF,
       (ISNULL (IRS04.TOTALDISCOUNTED,0)) AS TOTALDISCOUNTED,
FROM LG_060_CLCARD CL
LEFT JOIN (SELECT CLIENTREF, SUM(TOTALDISCOUNTED) AS TOTALDISCOUNTED
           FROM LG_060_04_STFICHE
           WHERE GRPCODE = 2 AND TRCODE IN (7,8)
           GROUP BY CLIENTREF) IRS04
    ON IRS04.CLIENTREF = CL.LOGICALREF
ORDER BY CL.LOGICALREF
我想求和
STFICHE.TRCODE
列值的
STFICHE.TRCODE
值为(7,8)的
STFICHE.totalfished
列值的和,其中
STFICHE.TRCODE
列值为(2,3),并从第一个(7,8)中减去第二个(2,3)值。这个新值将是我客户的销售额

我的代码为第一部分给出了正确的结果(7,8个标准的总和),但我不能结合其他标准


我的第二个问题是在日期范围内过滤这些值。例如我想显示仅包含2019年6月的销售额(从
STFICHE.DATE
列)。如何将此条件添加到同一sql?

此处可能需要一个case语句-

SELECT CL.LOGICALREF,
       (ISNULL (IRS04.TOTALDISCOUNTED,0)) AS TOTALDISCOUNTED,
FROM LG_060_CLCARD CL
LEFT JOIN (SELECT CLIENTREF, SUM(CASE WHEN TRCODE IN (7,8) THEN TOTALDISCOUNTED
                                      WHEN TRCODE IN (2,3) THEN TOTALDISCOUNTED*-1
                                 END) AS TOTALDISCOUNTED
           FROM LG_060_04_STFICHE
           WHERE GRPCODE = 2
           AND STFICHE.DATE BEETWEEN '2019-07-01' AND '2019-07-31'
           GROUP BY CLIENTREF) IRS04
    ON IRS04.CLIENTREF = CL.LOGICALREF
ORDER BY CL.LOGICALREF
  • 您可以尝试在查询中添加另一个左联接,如下所示:
  • 或者,您可以使用如下查询:

        SELECT CL.LOGICALREF,
            (ISNULL(IRS04.TOTALDISCOUNTED_1,0) - ISNULL(IRS04.TOTALDISCOUNTED_2,0)) AS TOTALDISCOUNTED
        FROM LG_060_CLCARD CL
        LEFT JOIN (
            SELECT 
                CLIENTREF, 
                SUM(CASE WHEN TRCODE IN (7,8) THEN TOTALDISCOUNTED ELSE 0 END) AS TOTALDISCOUNTED_1,
                SUM(CASE WHEN TRCODE IN (2,3) THEN TOTALDISCOUNTED ELSE 0 END) AS TOTALDISCOUNTED_2,
            FROM LG_060_04_STFICHE
            WHERE GRPCODE = 2
            GROUP BY CLIENTREF
        )IRS04 ON CL.LOGICALREF=IRS04.CLIENTREF
    
  • 对于第二个问题,我通常使用
    YEAR
    MONTH
    函数,例如:
  • 或者,要获取范围介于2个日期之间的数据,可以使用
    between
    语句,例如:

    SELECT * FROM LG_060_04_STFICHE WHERE [DATE] BETWEEN '2019-06-01' AND '2019-06-30'
    

    请给我们一些表格格式的
    text
    或DDL和DML语句中的示例数据,以及您期望的结果,谢谢您的回答。我想:A=SUM(TRCODE IN(7,8)然后TOTALDISCOUNTED),B=SUM(TRCODE IN(2,3)然后TOTALDISCOUNTED),RESULT=A-B(A减B)@mithderler,你现在可以试试吗。我忘了用-1。我很确定这比公认的答案要短。非常感谢。这正是我想要的。它适用于逻辑和日期问题。
       SELECT * FROM LG_060_04_STFICHE WHERE YEAR([DATE])='2019' AND MONTH([DATE])='6'
    
    SELECT * FROM LG_060_04_STFICHE WHERE [DATE] BETWEEN '2019-06-01' AND '2019-06-30'