- Вы можете попробовать добавить еще одно левое объединение в свой запрос, например, так:
SELECT CL.LOGICALREF,
(ISNULL(IRS04.TOTALDISCOUNTED,0) - ISNULL(IRS04_2.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
LEFT JOIN (
SELECT CLIENTREF, SUM(TOTALDISCOUNTED) AS TOTALDISCOUNTED
FROM LG_060_04_STFICHE
WHERE GRPCODE = 2 AND TRCODE IN (2,3)
GROUP BY CLIENTREF) IRS04_2
ON IRS04_2.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
, например:
SELECT * FROM LG_060_04_STFICHE WHERE YEAR([DATE])='2019' AND MONTH([DATE])='6'
Или для получения данных с диапазоном между 2 датами вы можете использовать BETWEEN
утверждение, например:
SELECT * FROM LG_060_04_STFICHE WHERE [DATE] BETWEEN '2019-06-01' AND '2019-06-30'