2012-05-02 24 views
2

まずは私の結果は次のようになります:
| KONTONR |月| SELSKAPSKODE | BELOP |
| 459611 ---- | 1 ------ | BAGA -------------- | 156000 |
| 459611 ---- | 2 ------ | BAGA -------------- | 73000 - |
| 459611 ---- | 4 ------ | BAGA --------------- | 217000- |
| 459611 ---- | 5 ------ | BAGA --------------- | | 136000- |
| 459611 ---- | 1 ------- | CIVO --------------- | 45896 - |
| 459611 ---- | 3 ------ | CIVO ---------------- | 32498 - |
| 459611 ---- | 4 ------ | CIVO ---------------- | 9841 --- |
| 330096 ---- | 1 ------ | BAGA --------------- | 42347 - |
| 330096 --- | 3 ------- | BAGA --------------- | 3695 --- |
|等。SQLその月のテーブルにデータが存在しない場合、月に '0'値を表示する方法

私はいくつかのアカウントで月2回の予約を表示しようとしていますが、アカウントごとに(KONTONR)予約が記録されているいくつかのコード(SELSKAPSKODE)(BELOPとしての予約の合計)があります。私は1ヶ月あたりのコード(SELSKAPSKODE)ごとのアカウント(KONTONR)ごとの予約(BELOP)の合計の概要を提供したいと思います。私の問題は、そのコードに予約がない場合、コードが1ヶ月に表示されないことです。これを修正する方法はありますか?私はなぜコードが表示されないのか理解しています。なぜなら、彼らは単に私が照会しているテーブルにないからです。そして、私は、解決策が「別の」テーブルと結合する(偽の)テーブルを作ることにあると考えています。
私はそれを動作させることができません、私はかなりSQLに新しいです...誰かが助けてくれる?

SELECT  TOP (100) PERCENT KONTONR, Month, SELSKAPSKODE, BELOP 
FROM   (SELECT  SELSKAPSKODE, KONTONR, SKIPS_KODE, MONTH(POSTDATO) AS 
Month, SUM(BELOP) AS BELOP 
FROM   dbo.T99_DETALJ 
WHERE  (POSTDATO >= '2012-01-01') AND (BILAGSART = 0 OR BILAGSART = 2)      
GROUP BY SELSKAPSKODE, KONTONR, SKIPS_KODE, MONTH(POSTDATO)) AS T99_summary 
GROUP BY KONTONR, SELSKAPSKODE, Month, BELOP 
ORDER BY KONTONR, SELSKAPSKODE, Month 

をだから私は「いっぱいしたい結論:私のクエリは次のようになります
(これは?!ローミングサービスを行う場合、私は、参加のためのセットアップをするために「ネストされた」クエリを挿入しました) '欠落している月(最初の表を参照)。たとえば、アカウント(KONTONR)の459611月3は「欠落」です。私は3ヶ月間、予約の合計(BELOP)を「0」として表示したいと考えています。どんな助けもありがとうございます。

+0

どのデータベース・サーバーを使用していますか? – M3HD1

+0

アプリケーションはMicrosoft SQL Server 2005で動作していますが、SQL Server 2012 Management Studioを使用してデータを取得しています。 – Benne

答えて

3

値が1〜12のテーブルを照会して、結果を外部に残すことができます。

ここでは、クエリの代わりにテーブル変数を使用し、数値を含むテーブルを作成するCTEを使用するサンプルを示します。

declare @T table 
(
    Month int 
) 

insert into @T values(1) 
insert into @T values(1) 
insert into @T values(1) 
insert into @T values(3) 
insert into @T values(3) 

;with Months(Month) as 
(
    select 1 
    union all 
    select Month + 1 
    from Months 
    where Month < 12 
) 
select M.Month, 
     count(T.Month) Count, 
     isnull(sum(T.Month), 0) Sum 
from Months as M 
    left outer join @T as T 
    on M.Month = T.Month 
group by M.Month 

結果: 合計(ケースBELOPが、その後1 nullではない:これでSUM(BELOP):

Month  Count  Sum 
----------- ----------- ----------- 
1   3   3 
2   0   0 
3   2   6 
4   0   0 
5   0   0 
6   0   0 
7   0   0 
8   0   0 
9   0   0 
10   0   0 
11   0   0 
12   0   0 
+0

ありがとうございます。テーブル作成の代わりにクエリを挿入することはできますか?私はそれが完全に機能するようにはしません – Benne

+0

@Benne - '@ T'はあなたの質問の代わりです。だから、 '左外部結合@TをTに置き換えて、'左外部結合(あなたの質問はここに行く)をTと置き換えてください。 ' –

+0

もう少し詳しく知りたいです。私はあなたのパラメータ@Tの代わりに私のクエリを入れます。そして、私は '入れ子になった'部分を削除しました。そして、私は '私の' dbo.T99_DETALJテーブルに参加します。しかし、それは私の質問から既に得たテーブルを表示するだけです。明らかに私は何か間違ったことをしています:-)しかし、私はそれを理解することはできません。あなたは多分私を(さらに)方向に向けるでしょうか?再び、事前に感謝! – Benne

0

あなたはまた、これを修正することができることすべてを行うにはしたくない場合はその他0エンド)

関連する問題