user3580480:
私は、次の単純化されたテーブルがあります。
|---------------------|------------------|------------------|
| month | customer | value |
|---------------------|------------------|------------------|
| 1 | A | 20 |
|---------------------|------------------|------------------|
| 1 | B | 20 |
|---------------------|------------------|------------------|
| 1 | C | 20 |
|---------------------|------------------|------------------|
| 2 | A | 20 |
|---------------------|------------------|------------------|
| 2 | B | 20 |
|---------------------|------------------|------------------|
あなたが見ることができるように、月2ため、顧客Cの値がありません。
この例では、私は私のselect文の内部で、programtically月=「2」顧客が=「C」値=「0」を追加する必要があります
SELECT month, customer, value FROM mytable
私は私の本当のテーブルでより多くの行を持っていますが、最終的な結果は、各月の同じ顧客リストにする必要があります。
すべてのヘルプは大歓迎します。
ゴードン・リノフ:
使用cross join
行と生成するために、left join
値をもたらすに:
select m.month, c.customer, coalesce(t.value, 0) as value
from (select distinct month from t) m cross join
(select distinct customer from t) c left join
t
on t.month = m.month and t.customer = c.customer;
注:あなたが数ヶ月または顧客のために他のソースを持っている場合、それらはおそらく速く使用するよりもですcount(distinct)
。