2016-07-17 13 views
-2

各機関のすべてのモデルの合計を取得し、各モデルの数を選択しようとしています。SQL Server:各機関のすべてのモデルの合計を選択し、各モデルの数を選択します

私たちは、自動車会社のデータベース内の異なるテーブルが、私は次のクエリを持っている:それが生成するよう

SELECT distinct (c.check) ,cm.description as agency, cms.description as model, co.result 
FROM check c 
INNER JOIN check_obd co on c.idcheck=co.idcheck 
INNER JOIN vehicular_census vc on vc.idvehicularcensus = c.idvehicularcensus 
LEFT JOIN cat_mark cm on vc.idmark=cm.key 
LEFT JOIN cat_mark_submark cms on vc.idmark_submark=cms.idmark_submark 
WHERE c.operation_status=5 

このクエリは理想的ではありません。

Before

私は希望結果は次のようになります。

After

希望の結果を得るために上記のクエリを変更するにはどうすればよいですか?ここで

+0

あなたが探しているものは、カウントを持つ単純なGROUP BY文で実現できます。例えば'SELECT cm.description AS代理店、COUNT(cms.description)OVER(PARTITION BY cm.description)AS合計、cms.description ASモデル、COUNT(*)AS数量<私のテーブルを挿入する> GROUP BY cm.description、cms .description' ...特定の出力を得るには、結果セットに行番号(代理店別に分割)を割り当て、行番号が1でなければ代理店/合計をnullにする必要があります。 – ZLK

+0

こんにちはZLK I次の問合せ:こんにちはZLK次の問合せを実行します。SELECT distinct cm.description代理店、count(cm.description) OVER(PARTITION BY cm.descripcion)合計で、 cms.description as model、count(cms。説明) 小計としてOVER(cms.descriptionによって区切られたもの) FROMチェックc INNER JOIN check_obd co on c.idcheck = co.idcheck INNER JOIN vehicular_census vc vc.idvehicularcensus = c.idve hicularcensus LEFT cm.description –

+0

によってvc.idmark_submark = cms.idmark_submark WHERE c.operation_status = 5オーダー前のクエリにcat_mark_submarkのCMSを登録しようvc.idmark = cm.key LEFT上cat_mark CMを登録しよう私は、この結果を取得します。https:を//1drv.ms/i/s!Ak2f8MCNYPvQgyI_Rd8lLKP15oB8 *****さまざまな合計結果を消去して、各代理店ごとに合計を1つだけ得るにはどうすればよいですか? 、thanks:9 –

答えて

0

は、あなたが(あなたが提供する現在のクエリを使用して)過剰なものを「取り除く」ことができる方法の例です:

SELECT MAX(CASE WHEN rn = 1 THEN colagency ELSE '' END) agency 
    , MAX(CASE WHEN rn = 1 THEN CAST(total AS VARCHAR(255)) ELSE '' END) total 
    , model 
    , subtotal 
FROM (SELECT distinct cm.description as colagency 
    , count(cm.description) OVER (PARTITION BY cm.descripcion) as total 
    , cms.description as model 
    , count(cms.description) OVER (PARTITION BY cms.description) as subtotal 
    , row_number() over (partition by cm.description order by cms.description) rn 
FROM check c 
INNER JOIN check_obd co on c.idcheck=co.idcheck 
INNER JOIN vehicular_census vc on vc.idvehicularcensus = c.idvehicularcensus 
LEFT JOIN cat_mark cm on vc.idmark=cm.key 
LEFT JOIN cat_mark_submark cms on vc.idmark_submark=cms.idmark_submark 
WHERE c.operation_status=5) T 
GROUP BY colagency, model, subtotal 
ORDER BY colagency 

基本的にそれはROW_NUMBER()関数でサブクエリであなたの現在のクエリを包むだ、と「代理店」の空白の最初の行ではないものを作る。

+0

次の画像はどれですか? – ZLK

+0

こんにちはZLK私は提供されたクエリを実行し、すべての繰り返しvalesを消去するように見えますが、各代理店の合計の結果は、次の画像のように最後の位置に印刷されます:https://1drv.ms/i/s! Ak2f8MCNYPvQgyQ2JIQcASqMCB3T、どのように私はメインの質問に表示される画像2のように、各サブモデルの始めに各合計を置くことができますか? :)、時間を投資していただきありがとうございました –

+0

OK。私は*上記の編集が問題を修正したと信じています。適切なグループ化と期待する結果を得るように、基本的に外部クエリを内部クエリにマイナー編集して再加工します。 – ZLK

関連する問題