【发布时间】:2018-06-23 00:04:07
【问题描述】:
我有以下 SQL 语句,它显示了来自销售点系统的交易。我想计算(MoneyIn - MoneyOut) 列的总和,但有点超出我的范围,并将其显示为单个值。我确信它是一个简单的模型。
DECLARE @StartDate DateTime;
DECLARE @EndDate DateTime;
DECLARE @SearchTerm NVARCHAR(200);
SET @SearchTerm = '%widget1%'
SET @StartDate = '2018-05-01 00:00:00'
SET @EndDate = DATEADD(month, 1, @StartDate)
SELECT TOP (500)
t.TransactionDate,
t.MoneyIn,
t.MoneyOut,
t.Description,
p.PaymentMethodName,
t.TransactionRef,
c.SalesItems,
COUNT(*) AS Occurrences
FROM
Transactions t
LEFT JOIN
Tills tl ON t.TillId = tl.TillId
INNER JOIN
PaymentMethods p ON t.PaymentMethodId = p.PaymentMethodsID
INNER JOIN
Membership m ON t.UserId = m.UserId
CROSS APPLY
(SELECT
STUFF((SELECT ',' + CAST(tp.Description AS VARCHAR(100))
FROM TransactionsPosLines tp
WHERE t.TransactionId = tp.TransactionId
FOR XML PATH('')), 1, 1, '') AS SalesItems) c
WHERE
t.TransactionDate >= @StartDate
AND t.TransactionDate <= @EndDate
AND (t.PaymentTypeId = 1)
AND SalesItems LIKE @SearchTerm
GROUP BY
t.TransactionDate,
t.MoneyIn,
t.MoneyOut,
t.Description,
p.PaymentMethodName,
t.TransactionRef,
m.Username,
c.SalesItems
ORDER BY
COUNT(*) DESC
输出:
2018-05-01 17:23:23.243 9.99 0.00 Sale - Card Card Shop Sale Grab n Go item 1
2018-05-08 13:15:04.577 10.00 -0.01 Sale - Cash Total: 9.99 Cash Shop Sale Grab n Go item 1
2018-05-10 14:08:47.120 7.99 0.00 Sale - Card Card Shop Sale Grab n Go item,Discount 1
我想展示:
总销售额:27.97
(MoneyIn 的总和 - MoneyOut 的总和)
【问题讨论】:
-
您是要合并这三个记录还是添加一个额外的字段?
-
@DanielMarcus 我正在尝试巩固.. 只是想总结一下 MoneyIn - MoneyOut 的列并为此提供价值?
-
所以只需从最终结果集中选择 sum(MoneyIn)-sum(MoneyOut)
-
@DanielMarcus 我确实试过这个,但让我再试一次......
-
从组中删除 moneyin 和 moneyout,然后 sum(moneyin) - sum(moneyout) as moneytotal
标签: sql-server tsql