0
私は、顧客と会社を別々の月からグループ化して、全体的に1つの顧客/会社しか持てないという考え方があります。ASP/SQL:グループデータを列に変換
私がしたいのは、すべての顧客(グループ化)とすべての月のMoney
を月(金)が列である新しいテーブルに取得することです。どのようにSQLでこれを行うことができますか?だから多分私はこのように、それは簡単な参加だそれを見たよう
私は、顧客と会社を別々の月からグループ化して、全体的に1つの顧客/会社しか持てないという考え方があります。ASP/SQL:グループデータを列に変換
私がしたいのは、すべての顧客(グループ化)とすべての月のMoney
を月(金)が列である新しいテーブルに取得することです。どのようにSQLでこれを行うことができますか?だから多分私はこのように、それは簡単な参加だそれを見たよう
....顧客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
この例では動作しますが、残念ながらデータが約100000行以上の場合に実行するのに数分かかる場合があります。 –
MonthsテーブルのCustomerIdにインデックスを追加します。 IdはCustomerテーブルの主キーだとします。 –
残念ながら、そのような顧客1,2,2,4とCusomter_id 1,2,2,4。したがって、月と月のテーブルにCustomerとCusotmer_idを複数回使用することができます。しかし、それはグループ化することが大丈夫ですし、それは完全な同意者になるでしょう。たぶん、それを行う良い方法は、ちょうどcumstomer、顧客、お金とそれらをグループ化してビューを作成し、顧客テーブルに参加することですか?私はすでに顧客IDの識別子を持つcustoemrグループを作成してから毎月のテーブルに参加しますが、それには数分かかります... –