欠損値のためにSELECTクエリにINSEETを追加

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)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=392655&siteId=1