如何在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
函数,例如: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'