2017-01-08 3 views
0

私はSQLとASP.NETの新機能です。私のプロジェクトの1つでは、次の出力が必要ですrequried output。今まで私はこれをやったmy current output。しかし、ここでいくつかのテストタイプ名が繰り返されています。この問題を解決するには?asp.netアプリケーションのSQLクエリについて

私の現在のクエリ:

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

クエリごとに、あなたはtesttypeと料金でグループ化しました。 Xrayでは3行の料金がかかり、合計料金の列から明らかなので、Xrayでは異なる行が表示されています。あなたがselect n group by句から手数料欄を削除すると、テストタイプの一行が得られるでしょう –

+0

@Rajat Mishraしかし、特定のテストタイプの合計金額はどうやって得ることができますか? –

+0

あなたは総額(総額)AS TotalAmountはあなたを助けるでしょうか? 生データを表示せずに言うのは難しいです。 –

答えて

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 
0

は、あなたがメインクエリからの手数料列を削除することができます。次に、料金のIDの結合で総額の相関サブクエリを使用します。

1

各テストタイプごとに複数の投稿を得る理由は、グループ別に料金を使用するためです。これは、Feeがいずれかの行で異なる場合、その行が別々の結果行として投稿されることにつながります。

私が正しく理解していれば(生データを表示せずに言うのは難しい)、Xrayのように、いくつのテストとそのすべてのテストの料金を表示したいのですか?

十分ではありませんか?

SELECT 
    tyi.TestType, 
    COUNT(tr.TestID) AS NoOfTest, 
    sum(Fee) 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 

これはもちろん、TotalAmountの計算方法に依存します。

+0

ありがとう、あなたのANは良かった。しかし何らかの問題(1)があります。NoOfTestなしのTestTypeの場合、TotalAmountはゼロを表示する代わりに表示されます。 (2.)一部のTotalAmountが正しくありません。私は新しいスクリーンショットを追加しようとしています –

+0

私が述べたように、未加工データがどのように見えているか、そして出力がどのように見えるかわからないので、計算カラムをどのように作成するのかを知ることは非常に難しいです。いくつかのサンプルデータを引き出すことができれば、そしてそのクエリを実行するときにそのサンプルデータがどのように見えるようにするかは、良い例を与えるほうがはるかに簡単です。 –

+0

私はLeft outer joinを見逃してしまったので私の答えも編集しました。 –

関連する問題