2016-06-02 10 views
0

3列のレポートを作成しようとしていますが、これらはすべて "ローカルストア"、 "ID"、 "TotalSpend"、 "Member Card Number"を含む同じテーブルから来ています。sql LiteのSQLクエリ

Store  Totalnumofmembers TotalSpendforall 
-----  ------------------ --------------- 
Store A  1500     $100.50 
Store B  2000     $500.00 
Store C  400     $300.00 

そして、その私にこのクエリを実行しようとしたとき、私は望んでいた結果与えていない:

SELECT "Local Store", 
    (SELECT count(ID) FROM ListMembers WHERE Id=a.Id and "Member Card Number" is not null) AS totalnumofmembers, 
    (SELECT sum("total spend") FROM ListMembers WHERE Id=a.Id) AS totalspendforall FROM ListMembers a 
GROUP BY "Local Store" 

を離れて自己結合を使用してから、他の方法はありますか? ありがとう

+1

クエリが返すものと期待される結果は何ですか? – istovatis

答えて

0

これを1つのクエリで実行する場合は、CASEステートメントを使用して、合計クエリの合計と同じクエリで有効なカード番号を持つメンバーの条件付きカウントを実行できます。あなたはサブクエリを持つ気にしない場合は

SELECT `Local Store`, 
    COUNT(CASE WHEN `Member Card Number` IS NOT NULL THEN 1 ELSE 0 END) AS totalnumofmembers, 
    SUM(`total spend`) AS totalspendforall 
FROM ListMembers 
GROUP BY `Local Store` 

は、その後、次の

SELECT t1.`Local Store`, t1.totalnumofmembers, t2.totalspendforall 
FROM 
(
    SELECT `Local Store`, COUNT(*) AS totalnumofmembers 
    FROM ListMembers 
    WHERE `Member Card Number` IS NOT NULL 
    GROUP BY `Local Store` 
) t1 
INNER JOIN 
(
    SELECT `Local Store`, SUM(`total spend`) AS totalspendforall 
    FROM ListMembers 
    GROUP BY `Local Store` 
) t2 
    ON t1.`Local Store` = t2.`Local Store` 
+0

ありがとうございました。私は別の別の結合を試みた。 "ローカルストア"を選択します。 "会員数"として合計(b。 "総支出")を加算します。 ListMembersから: ListMembers b on b.id = a.id a 。 "会員カード番号"はnullではありません。 グループ。a。 "ローカルストア"私は上記で試して、私はそれが数字が大きいので何をしていると思うかは分かりません。論理は正しいですか?申し訳ありませんが、次の行に移動するためにEnterキーを押すたびにコメントを書き留めることができます( – ll2016

+0

...と...まだ問題はありますか?試してみましたか? –

+0

もう1つの質問私は現在、6月1日より遅いメンバー登録を示す別の列を追加したいと思います。これは、私の他の合計メンバー列とは異なります。私は次のクエリを試してみましたが、新しい列の結果が間違っていますか? – ll2016

0

ありがとうを試すことができます。それを解決することができました。 SQL Liteがoracleのような機能を使用していないことは分かりませんでした。すべての良い。どうもありがとうございました。