以下の例を簡略化して説明しましたが、記述したとおりの結果が本当に必要であることをご存知でしょうか。SQL Serverの水平DISTINCT COUNTまたは重複カウントを持たないCOUNT IF
私は、どのように参照されたかを含む顧客に関する情報を含むテーブルを持っています。たとえばMyTable
については (EDIT:私は簡素化の上に働かない答えになった彼らは良い答えですが、私の問題を解決しない、私は明確にするため、パズルの最後のピースを追加した。。):
STORE CUS_ID REFERRED MONEYMADE
1 11 RADIO 10.00
1 15 WALKIN 20.00
1 11 RADIO 30.00
2 12 RADIO 40.00
2 12 RADIO 50.00
3 13 WALKIN 60.00
3 14 WALKIN 70.00
私はDISTINCTの数を数え、特定のタイプによって参照され、ストアごとにグループ化された顧客をカウントしたいと思います。私が行うことができ、以下:
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 1 40.00 1 20.00
2 1 90.00 0 0.00
3 0 0.00 2 130.00
私はSUMを使用してクエリを実行しようとしましたと:
STORE COUNTEM REFERRED MONEYMADE
1 1 RADIO 40.00
1 1 WALKIN 20.00
2 1 RADIO 90.00
3 2 WALKIN 130.00
は、しかし、私は本当にこのような結果が必要:
SELECT
STORE, COUNT(DISTINCT CUS_ID) AS COUNTEM,
REFERRED, SUM(MONEYMADE)
FROM MyTable
GROUP BY REFERRED, STORE
これは、次のような結果になりますCASEは重複を数えます。
SELECT
STORE,
SUM (CASE REFERRED WHEN 'RADIO' THEN 1 ELSE 0 END) AS RADIO,
SUM (CASE REFERRED WHEN 'RADIO' THEN MONEYMADE ELSE 0 END) AS RADIO_MONEY,
SUM (CASE REFERRED WHEN 'WALKIN' THEN 1 ELSE 0 END) AS WALKIN
SUM (CASE REFERRED WHEN 'WALKIN' THEN MONEYMADE ELSE 0 END) AS WALKIN_MONEY,
FROM MyTable
GROUP BY STORE
戻り、この誤った結果:たとえば
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 2 40.00 1 20.00
2 2 90.00 0 0.00
3 0 0.00 2 130.00
はこれをやってのけるする方法はありますか?私は "count if"型の関数を探しましたが、唯一見つかったのはsum - caseメソッドです。
申し訳ありませんが、私はこれが動作しないようにする列がいくつか追加されています。言い換えれば、他の列は行を一意にします。元の投稿を編集します。これは良い提案ですが、私はそれを感謝します。 @LittleTreeX。 – LittleTreeX
編集は役に立たなかった。 3つの列にDISTINCTを入力すると、ダンプが削除されます。その後、SUM/CASEを実行すると、それはうまくいくはずです –
私の問題を(うまくいけば)明確にするために私の質問をもう一度編集しました。なぜこの解決策はうまくいかないと思いますか?私は、この答えは、元々書かれたように(混乱のために申し訳ありませんが、助けてくれてありがとう)私の質問に答えていると言いたいと思います。 – LittleTreeX