我写了这个SQL:
select distinct PayID, PaymentDate, AccountNumber, sum(PaymentAmount) as Amount
from tblInvoicePaymentDetails
where CustomerID = 'mud4978'
group by PayID, PaymentDate, AccountNumber
输出是:
PayID PayDate Account Amount
1 2011-07-05 11:09:14.390 NULL 700.00
1 2011-07-05 11:09:14.407 NULL 100.00
2 2011-07-05 11:20:05.517 NULL 0.00
2 2011-07-05 11:20:05.547 9000 500.00
2 2011-07-05 11:20:07.000 9000 100.00
3 2011-07-05 12:19:22.017 100000 200.00
3 2011-07-05 12:19:22.077 100000 100.00
但我的要求是显示3条记录(避免重复)和金额总和如下:
payid paydate account amount
1 2011-07-05 11:09:14 null 800.00
2 2011-07-05 11:20:05 9000 600.00
3 2011-07-05 12:19:22 100000 300.00
请帮助
答案 0 :(得分:0)
看起来您只想按PayID分组(否则将考虑其他列)。
PayDate会有所不同,因此如果您需要其中一个值,则需要在输出中选择所需的确切PayDate。您可能希望考虑Max或Min来选择已存在的那个。
帐户也有所不同,所以你需要再次使用Min或Max
之类的东西您的查询将如下所示:
SELECT DISTINCT
PayID,
MIN(PaymentDate) AS PaymentDate,
MAX(AccountNumber) as AccountNumber,
SUM(PaymentAmount) as Amount
FROM tblInvoicePaymentDetails
WHERE CustomerID='mud4978'
GROUP BY PayID
答案 1 :(得分:0)
问题是paydate列包含不同的值。您需要对内部值进行标准化,以便它们代表所有相同的日期,对于那些应该分组的日期。这可以通过更新您可能不想要的每一行来实现。
您可以添加另一行仅包含日期(在这种情况下,时间值必须始终为00:00:00)。
第三种方法是创建一个包含规范化日期值的子查询,我建议一开始。您可以通过查看下面的示例来了解如何实现此目的。将表变量替换为select语句中的表名以及列名。
DECLARE @x TABLE (
amount int,
dt DateTime )
INSERT INTO @x (amount, dt) VALUES (1, '01.01.2005 12:00:12')
INSERT INTO @x (amount, dt) VALUES (2, '01.01.2005 10:00:12')
INSERT INTO @x (amount, dt) VALUES (2, '01.02.2005 10:00:12')
SELECT SUM(a), b FROM
(
SELECT
amount AS a,
DATEADD(dd, 0, DATEDIFF(dd, 0, dt)) AS b
FROM
#x
) subtable
GROUP BY b