2017-03-08 4 views
0

私は、顧客と会社を別々の月からグループ化して、全体的に1つの顧客/会社しか持てないという考え方があります。ASP/SQL:グループデータを列に変換

私がしたいのは、すべての顧客(グループ化)とすべての月のMoneyを月(金)が列である新しいテーブルに取得することです。どのようにSQLでこれを行うことができますか?だから多分私はこのように、それは簡単な参加だそれを見たよう

enter image description here

答えて

0

....顧客xyが1月にお金1を持っていますが、それは2月にというようにNULLを取得することが可能です:

DECLARE @Customer TABLE (ID int, Name varchar(100)) 
DECLARE @January TABLE (CustomerId int, Money decimal) 
DECLARE @February TABLE (CustomerId int, Money decimal) 
DECLARE @March TABLE (CustomerId int, Money decimal) 

INSERT INTO @Customer (id, name) VALUES (1, 'C1') 
INSERT INTO @Customer (id, name) VALUES (2, 'C2') 
INSERT INTO @Customer (id, name) VALUES (3, 'C3') 

INSERT INTO @January (CustomerId, Money) VALUES (1, 500) 
INSERT INTO @January (CustomerId, Money) VALUES (2, 300) 

INSERT INTO @February (CustomerId, Money) VALUES (2, 100) 
INSERT INTO @February (CustomerId, Money) VALUES (3, 200) 

INSERT INTO @march (CustomerId, Money) VALUES (1, 700) 
INSERT INTO @march (CustomerId, Money) VALUES (2, 600) 

SELECT DISTINCT c.*, j.Money as Money_January, f.Money as Money_February, m.Money as Money_March 
FROM @Customer c 
LEFT JOIN @January j ON c.Id = j.CustomerId 
LEFT JOIN @February f ON c.Id = f.CustomerId 
LEFT JOIN @March m ON c.Id = m.CustomerId 
+0

この例では動作しますが、残念ながらデータが約100000行以上の場合に実行するのに数分かかる場合があります。 –

+0

MonthsテーブルのCustomerIdにインデックスを追加します。 IdはCustomerテーブルの主キーだとします。 –

+0

残念ながら、そのような顧客1,2,2,4とCusomter_id 1,2,2,4。したがって、月と月のテーブルにCustomerとCusotmer_idを複数回使用することができます。しかし、それはグループ化することが大丈夫ですし、それは完全な同意者になるでしょう。たぶん、それを行う良い方法は、ちょうどcumstomer、顧客、お金とそれらをグループ化してビューを作成し、顧客テーブルに参加することですか?私はすでに顧客IDの識別子を持つcustoemrグループを作成してから毎月のテーブルに参加しますが、それには数分かかります... –

関連する問題