私はすべての価格と税金を2カラムに日付範囲(同じ日付ではない)で抽出しようとしています。 T-SQLのことを必要とするので、私は他の2列によってグループに必要があるため: は、それが集計関数またはGROUP BYのいずれかに含まれていないためTSQLグループは重複行を生成します
列は「...」選択リストに無効です句。
時々、重複するユーザーIDがあります。 (なぜ途中で分からない...)
を私はこのSQLを持っている:
WITH myQuery AS
(
Select
c.name, c.id,
CASE
WHEN g.dateCreated BETWEEN CAST ('2016-06-01 00:00:00.000' AS DATETIME)
AND CAST ('2017-05-31 23:59:59.000' AS DATETIME)
THEN SUM(CAST(g.price AS decimal(20,2)))
ELSE 0
END AS TOTAL_PRICE,
CASE
WHEN g.dateCreated BETWEEN CAST ('2016-01-01 00:00:00.000' AS DATETIME)
AND CAST ('2016-12-31 23:59:59.000' AS DATETIME)
THEN SUM(CAST(g.tax AS decimal(20,2)))
ELSE 0
END AS TOTAL_TAX
FROM customers c
inner join goodies g
ON c.id = g.customer_id
GROUP BY c.name, c.id, g.dateCreated
)
SELECT count(*) FROM myQuery
私は5203行を得ました。私はユーザーが5031人しかいません。
データを分析すると、重複したデータがあります。
例:
Alex, 12, 0.00, 0.00
Alex, 12, 100.00, 14.55
Nancy, 4, 0.00, 0.00
Arthur, 97, 48.14, 09.17
私はIDのみによって、グループにしようとしたが、私がそれを行うことができないようです。
なぜデータが重複しているのか、それを防ぐにはどうすれば良いのですか?あなたの条件付きの集約を修正し、group by
からdateCreated
を取り除く
は、 'グッズがあるものは何でも、以上のグッズを持って12' CUSTOMER_ID。 'SELECT * FROM goodies WHERE customer_id = 12'を試して、2つ以上のレコードがあるかどうか確認してください。 – Eric
CASE文の外でSUMを移動し、GROUP BYからg.dateCreatedを削除してみてください。 – McNets