2017-06-27 17 views
1

私はすべての価格と税金を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を取り除く

+1

は、 'グッズがあるものは何でも、以上のグッズを持って12' CUSTOMER_ID。 'SELECT * FROM goodies WHERE customer_id = 12'を試して、2つ以上のレコードがあるかどうか確認してください。 – Eric

+1

CASE文の外でSUMを移動し、GROUP BYからg.dateCreatedを削除してみてください。 – McNets

答えて

2

:彼らはgoodiesに何の対応する行を持っていない場合でも

with myQuery as (
select 
    c.name 
    , c.id 
    , total_price = sum(case 
     when g.dateCreated >= '20160601' and g.dateCreated < '20170601' 
     then cast(g.price as decimal(20,2)) 
     else 0 
     end) 
    , total_tax = sum(case 
     when g.dateCreated >= '20160101' and g.dateCreated < '20170101' 
     then cast(g.tax as decimal(20,2)) 
     else 0 
     end) 
from customers c 
    left join goodies g 
    on c.id = g.customer_id 
group by 
    c.name 
    , c.id 
--, g.dateCreated 
) 
select count(*) from myQuery; 

left joininner joinを変更するには、customersを返します。

日付の範囲コードを変更して、含まれる内容をより明確にするように変更しました。

参考:明らか

関連する問題