【发布时间】:2011-02-20 10:35:31
【问题描述】:
我有一个包含以下列的表格。
ID Amount
1 300
2 400
3 500
1 300
2 400
3 500
对应于IDs有amount列。
我希望对使用 distinct 关键字的金额列求和,这样总和是 1200 而不是 2400。
但这里有问题;
如果ID是就说
ID Amount
1 300
2 400
3 500
4 400
值是 300、400、500 和 400。因此总数应该是 1600,但是因为我对 case1 使用了 DISTINCT 关键字,所以总数为 1200。
我应该如何编写我的 sql 查询以使两种情况都满足?
仅供参考,我的 SQL 查询不仅仅是求和,还涉及与其他表的关系,然后使用一些公式,我提出了数据。
谢谢
更新:添加 SQL 查询
Select distinct
(
(
select sum( fees)
from (
select distinct billdetail.fees
from billdetail
join payment on billdetail.billdetailid = payment.billdetailid
where billdetail.patientid=@patientid
) as temp
)
-
(
Select SUM (Payment.PlanPaid)
+ SUM (Payment.PatPaid)
+ SUM (Payment.WriteOff1)
+ SUM (Payment.WriteOff2)
from BillDetail
left outer join Payment on BillDetail.BillDetailID = Payment.BillDetailID
where BillDetail.PatientID = @patientid
)
)
from BillDetail
where PatientID = @patientid
【问题讨论】:
-
发布您的 TSQL 查询......
-
在 SO 评论框中发布时查询丢失格式...
-
查询很疯狂!它生成与 BillDetail 记录一样多 (X) 行的摘要(内部和外部查询之间没有相关性),然后使用 DISTINCT 将 X 行相同的总和折叠成单个值。闻起来像一个非常非常低效的查询。对于当前查询,我更新的答案应该使用 (1/X) 的时间给出相同的结果。
标签: sql sql-server database sql-server-2005 sql-server-2008