2017-08-02 4 views
0

私はこれを得るための最善の方法を巡って頭を抱えようとしています。SQLクエリ:複数の列で同じレコードを数えますが、別の列がDistinctである場合

私はテーブルを持っています。ここには単純化バージョンがあり、無駄なアイテムはありません。 - カウントする - 私が用意してどのように多くの異なる種類の信号Iが知りたい

表のICD

Pin |Direction | Type | Specifics | Channel 
1 | output | digital | open/gnd | 1 
2 | output | digital | open/gnd | 2 
3 | output | digital | open/gnd | 3 
4 | output | digital | open/gnd | 4 
5 | output | power | open/gnd | 5 
6 | output | power | open/gnd | 5 
7 | input | digital | gnd  | null 
8 | input | digital | gnd  | null 
9 | input | digital | gnd  | null 
10 | input | digital | gnd  | null  
11 | output | digital | open/28  | 6 
12 | output | digital | open/28  | 7 

:貧しい書式設定を言い訳してください。この私は次のクエリで行ったクエリの結果は

SELECT Direction, Type, Specifics, Channel, COUNT(*) AS CountOf 
FROM ICDs 
GROUP BY Direction, Type, Specifics, Channel 
HAVING COUNT(*) > 0 

Direction | Type | Specifics | CountOf 
output | digital | open/gnd | 4 
output | power | open/gnd | **2** 
input | digital | gnd | 4 
output | digital | open/28 | 2 

この結果の唯一の問題は、電力出力がために(ハイパワーによる)2本のピンを使用することです同じチャネル、実際には、出力電力ラインは、私はサブクエリをやってみました代わりに、2

output | power | open/gnd | **1** 

のcountOf 1を、持っていると方向、タイプ、細目とチャンネルを前にグループ化されているすべての行を抽出する必要がありますので、上記のクエリを実行しますが、これは原因となったチャネル番号がない私のgnd入力のカウントを混乱させます。

希望の結果を得るために調整する方法はありますか?私は、重複したチャンネルの行を削除することができなければならないと思いますが、channel = nullの場所ではなく、その数を行います。私はちょうどそれを行う方法を把握することはできません。

注意:テーブルははるかに大きく、クエリはより複雑ですが、これは私の問題がある場所です。また、コーディングはC#VS2017で重要です。

ご協力いただきありがとうございます。

+1

互換性のないデータベースタグを削除しました。実際に使用しているデータベースのみにタグを付けます。 –

+0

電源の出力に2つのピンがあることを知るための情報は何ですか?したがって、カウントは2ではなく1でなければなりません。 –

+0

それでは、あなたの望む結果は何ですか@Razvan –

答えて

0

あなたは

SELECT Direction,Type,Specifics,CountOf=MAX(CountOf) 
FROM 
    (
    SELECT * 
      ,CountOf = DENSE_RANK() OVER (PARTITION BY Direction,[Type],Specifics ORDER BY isnull(Channel,pin)) 
    FROM Table1 
    ) AS a 
GROUP BY Direction,Type,Specifics 

SQL Fiddle

チャンネルがNULLの場合、それは、ピンを使用していますisnull(Channel,pin)に注意を払ってくださいサブクエリでDENSE_RANK()を使用することができます。 サンプルデータでは機能しますが、実際のデータでは機能しない可能性があります。実際のデータに合わせて調整してください。 希望します。

関連する問題