2012-02-13 9 views
1

viewは、私はビューを使用して新たなんだ

ビュー(SQL Serverなど)にデータを集約する上で助けが必要、と私は私がやりたいことはビューを使用して可能である場合は、正確にはわかりません。

最初のテーブルは、私がSQLにインポートした元のデータファイルです。 fruitとamount_from_usの列のみを含むビューを作成しましたが、そこに量を含める方法を理解するのに問題があります。通常、where句を使用しますが、他のデータを選択するのと同時にどのように行うことができるのか分かりません。

CREATE VIEW fruit_summary AS 
SELECT fruit 
, SUM(amount) AS amount 
FROM original_table 
WHERE bought_from_us = 'yes' 
GROUP BY fruit 

これは私にフルーツの列とamount_from_us列を取得します。ここでは

は、私がこれまで持っているものです。私はしかし、そこに日付と合計金額を取得する方法で失われています。これはビューを使用しても可能ですか?または、テーブルを作成して結合を使用するだけですか?

+0

あなたが期待される結果が何であるかを詳しく説明してください、あなたが得たカラムは何ができますが...は – Scorpion

+0

私の予想結果はみなし右の表は1日に各果実のインスタンスのみを持ち、合計額と私たちからの総量を示しています。 – eek142

+0

私の答えを確認してください、私はそれが動作することを願って...安心 – Scorpion

答えて

3

試してみてください。私の最初の答えについて

SELECT fruit, 
     [date], 
     SUM(amount) AS amount, 
     SUM(case when bought_from_us = 'yes' then amount else 0 end) 
        AS amount_from_us 
FROM original_table 
GROUP BY fruit, [date] 
+0

ありがとうございました!私はこの答えの単純さが大好きです。それはまさに私が探しているものです。 – eek142

+0

@ eek142 - それはあなたに最後のレコードを与えるでしょうJan-17 Banana 0 0? –

+0

ああ、良いキャッチ。それは私に "バナナ、0,0"を与えることはありませんが、私はそれで生きることができます。私は実際にその項目にその日記録された売上がないので、欠落しているものはゼロであると考えます。 – eek142

0
SELECT fruit 
, SUM(amount) AS amount 
, SUM(amount_from_us) AS amount_from_us 
, [Date] 
FROM original_table 
WHERE bought_from_us = 'yes' 
GROUP BY fruit, [Date] 
+0

これは残念ながら、amount_from_usには数値がないので、これはうまくいきません。これは基本的に単なるブール値です。 – eek142

+0

質問を提起した時のその日のタイプを説明しましたか?!!!!!!!その不公平は-1になる。あなたが私に答えたものを読んでください。「私の予想される結果は、右のテーブルです。毎日のフルーツの実例と、総量と私たちの総量があります。 – Scorpion

+0

その-1は私のものではありませんでした。私は決して助けようとしている誰かに投票しません。私は実際には、とにかく投票を下すのに十分な担当者がいない。 – eek142

0

申し訳ありませんが、今、私はあなたが必要なものを実現:

with CTE_fruit as (
SELECT fruit, date, SUM(amount) AS amount, NULL AS amountUS 
FROM original_table 
GROUP BY fruit, date 
union 
SELECT fruit, date, NULL AS amount, SUM(amount) AS amountUS 
FROM original_table 
WHERE bought_from_us = 'yes' 
GROUP BY fruit, date 
) 
select fruit, date, sum(amount), sum(amountUS) from CTE_fruit 
GROUP BY fruit, date 

私はこれが動作すると思います

1
create table #original_table 
(
    [date] datetime, 
    fruit varchar(50), 
    amount money, 
    bought_from_us char(3) 
) 

insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/18/2012', 'Apple', 10, 0); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/18/2012', 'Apple', 25, 'yes'); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/18/2012', 'Orange', 32, 0); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/18/2012', 'Banana', 8, 0); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/18/2012', 'Banana', 235, 'yes'); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/17/2012', 'Apple', 65, 0); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/17/2012', 'Apple', 4, 'yes'); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/17/2012', 'Orange', 56, 0); 
insert #original_table([date], fruit, amount, bought_from_us) 
values ('01/17/2012', 'Orange', 95, 0); 

何結果で求められていることはかなり複雑です。最後のレコードを取得するには、JAN-17バナナ0 0、あなたはこのようなものが必要です。

with date_fruit_table as 
(
    select date_table.[date], fruit_table.fruit 
    from 
     (select distinct fruit from #original_table) as fruit_table, 
     (select distinct [date] from #original_table) as date_table 
) 

select date_fruit_table.[date], date_fruit_table.fruit, 
    SUM(isnull(#original_table.amount, 0)) as amount, 
    SUM(case #original_table.bought_from_us when 'yes' then #original_table.amount else 0 end) as amount_from_us 
from date_fruit_table 
left outer join #original_table on #original_table.fruit = date_fruit_table.fruit 
    and #original_table.[date] = date_fruit_table.[date] 
group by date_fruit_table.[date], date_fruit_table.fruit 
order by date_fruit_table.[date] desc 
+0

ありがとう!私はこれを調べます。 – eek142

関連する問題