1

table1 の 2 つの列の結果を互いに減算し、そのテーブルにデータが存在する場合は table2 の合計を追加しようとしています。table2 に常にデータがあるとは限らないため、何もない場合は「0」を使用する必要があります。これは私がこれまで持っていたもので、テーブル2にISデータがあるときに間違った量を返します.

SELECT 
    CONVERT(CHAR(10),table1.PostingDate, 120) AS business_date, 
    table1.Location AS store_number, 
    (CASE WHEN COUNT(table2.Document) > 0 THEN 
          SUM(table1.Total - table1.TipAmount + table2.Total)
          Else 
                SUM(table1.Total-table1.TipAmount) 
    END) AS net_sales_ttl
FROM table1 
    left join table2 
        on CONVERT(CHAR(10),table1.PostingDate, 120) = CONVERT(CHAR(10),table2.PostingDate, 120)
WHERE table1.PostingDate between '2012-09-09' and '2012-09-16'
GROUP BY CONVERT(CHAR(10),table1.PostingDate, 120), table1.Location

結果は次のとおりです。

business_date   store_number    net_sales_ttl
2012-09-09  xxx         1699.61
2012-09-10  xxx             923.56
2012-09-11  xxx             1230.93  <--This should be 1399.93
2012-09-12  xxx             874.98
2012-09-13  xxx             1342.21
2012-09-14  xxx             1609.6
2012-09-15  xxx             2324.31

何らかの理由で、クエリが正しく計算されず、間違った値が返されます。table2 が値を持つ唯一の日は 09-11-12 であり、その金額はわずか -1.00 です。それは正しい値から -169 である 1230.93 を私に与えています。-169 が -1.00 になるべきときにどこから来ているのかわかりません。table1 の元の金額は 1400.93 で、table2 は -1.00 の値から差し引かれ、結果は 1399.93 になります。

    Sample data:
    table1 has date, location, and sales
    09-09 1111 5.00
    09-10 1111 3.00
    09-11 1111 7.00
    09-12 1111 10.00
    table2 has refunds
    09-11 1111 -1.00

    Return set would look like this:
    09-09 1111 5.00
    09-10 1111 3.00
    09-11 1111 6.00   <--Reflecting the refund from table2
    09-12 1111 10.00
4

1 に答える 1

0

試す

SELECT  
    CONVERT(CHAR(10),table1.PostingDate, 120) AS business_date,  
    table1.Location AS store_number,  
    SUM (table1.Total - table1.TipAmount + isnull(table2.Total,0))
FROM table1   
    left join table2  
    on CONVERT(CHAR(10),table1.PostingDate, 120) = CONVERT(CHAR(10),table2.PostingDate, 120)  
WHERE table1.PostingDate between '2012-09-09' and '2012-09-16'  
GROUP BY CONVERT(CHAR(10),table1.PostingDate, 120), table1.Location 

また、いくつかのサンプルデータが役立ちます-合計だけでは役に立ちません

サンプルデータに基づいて、これを試してください。

Select date, location, sum(sales)
from 
(
    select date, location, sales from table1 
    union
    select date, location, refunds from table2 
) v
group by date, location
于 2012-09-18T19:57:32.450 に答える