2016-10-31 14 views
0

は私がレポートを作成するには、この複数回SQL Serverで

   30 Day delay 60 Day Delay 90 day delay 120 day delay 
Fruits   1    1    0    0 
Grains   1    0    1    1 
Vegetables  2    0    1    1 
Other category 1    1    0    1 

条件のようなレポートを作成する必要があり、この

ProductName SaleReceipt SaleCode 
-------------------------------- 
F-Apple  1001  1 
F-Orange 1002  2 
G-Rice  1003  3 
G-Barile 1005  4 
G-Oats  1006  1 
V-Carrot 1007  4 
V-Cabbage 1008  3 
V-Potato 1009  1 
V-Tomato 1010  1 
Chocolate 1011  4 
Cookies  1012  1 
Cakes  1013  2 

のようなソーステーブルを持っているところでグループ化されている。

  • Fで始まるすべての商品名はフルーツとしてグループ化されています
  • すべてのPr Gで始まるoductName Vで始まる穀物
  • すべての商品名としてグループ化され
  • その他の製品名は、他のカテゴリ

  • 30日の遅延に行く野菜として分類されます= SaleCodeで(SaleReceipt)のカウント1

  • 60日の遅延(SaleReceipt)のカウントSaleCode = 2
  • 90日遅れて:(SaleReceipt)のカウントSaleCode = 3
  • 120日間の遅延を有する:(SaleReceipt)のカウントを有しますとしてleCode> = 4

    2回のグループ化方法が見つかりませんでした。私はあなたがgroup bycaseを使用することができますSQL Serverのに2014

+5

おっと!その接頭語ナンセンスは恐ろしいです。タイプを示す別の列が必要です。あなたがプレフィックスのひどい混乱を乗り越えたら、これはかなり基本的なグループ分けです。 –

答えて

6

を使用しています。またはルックアップテーブルを使用してください:

select coalesce(c.name, 'Other category'), 
     sum(case when salescode = 1 then 1 else 0 end) as salecode_1, 
     sum(case when salescode = 2 then 1 else 0 end) as salecode_2, 
     sum(case when salescode = 3 then 1 else 0 end) as salecode_3, 
     sum(case when salescode = 4 then 1 else 0 end) as salecode_4 
from t left join 
    (values ('F-%', 'Fruit'), ('G-%' , 'Grain'), ('V-%', 'Vegetable') 
    ) c(pattern, name) 
    on t.productname like c.pattern 
group by coalesce(c.name, 'Other category'); 
+0

ゴードン・リノフありがとうございます。私はそれを試してみました。私はレポートのすべてのセルに同じ値を取得しています。私が欲しいのは、果物では、30日の遅延セルで、私は条件選択でデータを必要としています*テーブルのどこからF_%のような商品名を(SaleReceipt)SaleCode = 1 – Please

+0

ありがとうございますGordon Linoff。私は結果を得た。ご協力いただきありがとうございます。残念ながら、スタックオーバーフローは、私が最近このサイトにサインアップしたときに答えとしてマークすることを許可していません。 – Please

関連する問題