我是SQL和ASP.NET的新手。对于我的一个项目,我需要以下输出requried output。到目前为止,我已经完成了这项工作my current output。但这里有一些测试类型名称正在重复。如何解决这个问题呢?
我当前的查询:
SELECT
tyi.TestType,
COUNT(tr.TestID) AS NoOfTest,
(Fee*COUNT(tr.TestID)) AS TotalAmount,
FROM
TestTypeInfo AS tyi
LEFT OUTER JOIN TestInfo AS ti ON
tyi.TestTypeId=ti.TestTypeId
LEFT OUTER JOIN TestRequest tr ON
ti.TestId=tr.TestId
WHERE
EntryDate BETWEEN '2016-12-31' AND '2016-12-31' OR
EntryDate IS NULL
GROUP BY
tyi.TestType
这给了我输出:
TestType | NoOfTest | TotalAmount
---------------------------------------
ECG | 4 | 600
X-Ray | 4 | 800
Blood | 6 | 1800
X-Ray | 4 | 1200
Echo | 4 | 4000
X-Ray | 3 | 3300
Echo | 0 | 0
UltraSonogram | 0 | 0
答案 0 :(得分:1)
您为每个TestType获得多个帖子的原因是因为您在分组中使用费用。这导致如果任何一行中的费用不同,则会导致该行作为单独的结果行发布。
如果我理解正确(很难说没有查看原始数据)你想要显示Xray的测试数量和所有这些测试的费用。
不会满足吗?
{{1}}
这当然取决于应如何计算TotalAmount。
答案 1 :(得分:0)
您可以从主查询中删除费用列。然后使用相关子查询来计算总金额以及费用ID的加入。
答案 2 :(得分:0)
这样的事情可以帮助你。请检查一次列名称。
Select a.TestType , Sum(a.NoOfTest) , Sum(a.TotalAmount) from
(Select tyi.TestType As TestType , Count(tr.testId) As NoOfTest,
(Fee*Count(tr.testId)) As TotalAmount
From TestTypeInfo As tyi
Left Outer Join TestInfo As ti on tyi.TestTypeId = ti.TestTypeId
Left Outer Join TestRequest tr on ti.TestId = tr.TestId
Where EntryDate between '2016-12-31' and '2016-12-31'
or EntryDate is null group by tyi.TestType, Fee) a
Group by a.TestType