2017-02-13 1 views
1

У меня есть проект, где мне нужно суммировать счета-фактуры, большинство из них довольно просто, поскольку я просто читаю из таблицы Invoice_master. Мне также нужно суммировать два поля на основе местоположения. Я могу получить данные, но он оставляет меня с тремя строками вывода для каждого счета-фактуры. Как мне это сделать?SQL У вас есть три строки вывода, нужен один

select INVCE_31 as "Invoice Number", 
    CAST(INVDTE_31 as date) as "Invoice Date", 
    CUSTID_31 as "Customer ID", 
    ORDNUM_31 as "Sales Order", 
    LNETOT_31 - ORDDSC_31 as "Net Amount", 
    FRTAMT_31 as "Freight Amount", 
    TAXTOT_31 as "Tax Total", 
    TAX1_31 as "Invoice Tax", 
    LNETOT_31 as "Inovice Total", 
    sum(case 
      when ID.STK_32 = 'SAMPLE' 
       then PRICE_32 
      else 0 
      end) as LOCSAMPLE, 
    sum(case 
      when ID.STK_32 = 'LITERTRE' 
       then PRICE_32 
      else 0 
      end) as LOCLITERTRE 
from Invoice_Master im 
left join Invoice_Detail id on im.INVCE_31 = id.INVCE_32 
where INVCE_31 = '00084048' 
group by ID.STK_32, 
    IM.INVCE_31, 
    IM.INVDTE_31, 
    IM.CUSTID_31, 
    IM.ORDNUM_31, 
    IM.LNETOT_31, 
    IM.TAX1_31, 
    IM.ORDDSC_31, 
    IM.FRTAMT_31, 
    IM.TAXTOT_31 

Выход:

Invoice Number Invoice Date Customer ID Sales Order Net Amount Freight Amount Tax Total Invoice Tax Inovice Total LOCSAMPLE LOCLITERTRE 
00084048  2016-06-30  BAYKIT  20088547 4549.61    20  4569.61 319.87  12708.4   0   793.72 
00084048  2016-06-30  BAYKIT  20088547 4549.61    20  4569.61 319.87  12708.4   0   0 
00084048  2016-06-30  BAYKIT  20088547 4549.61    20  4569.61 319.87  12708.4   213   0 
+0

Не могли бы вы поделиться своим текущим выходом? И что происходит, когда вы добавляете отличное ключевое слово, например: «select DISTINCT ....» –

+0

@Eray - Как будет отчетливо помогать? уже присутствует GROUP BY. – GurV

+0

Да, я вижу. но он говорит, что по какой-то причине он видит точно такие же строки 3 раза. –

ответ

0

Вы, вероятно, хотите использовать GROUP BY на CAST(INVDTE_31 as date) вместо INVDTE_31, который будет создавать дубликат, если есть несколько запись в тот же день, но разное время:

select invce_31 as "invoice number", 
    cast(invdte_31 as date) as "invoice date", 
    custid_31 as "customer id", 
    ordnum_31 as "sales order", 
    lnetot_31 - orddsc_31 as "net amount", 
    frtamt_31 as "freight amount", 
    taxtot_31 as "tax total", 
    tax1_31 as "invoice tax", 
    lnetot_31 as "inovice total", 
    sum(case 
      when id.stk_32 = 'sample' 
       then price_32 
      else 0 
      end) as locsample, 
    sum(case 
      when id.stk_32 = 'litertre' 
       then price_32 
      else 0 
      end) as loclitertre 
from invoice_master im 
left join invoice_detail id on im.invce_31 = id.invce_32 
where invce_31 = '00084048' 
group by im.invce_31, 
    cast(invdte_31 as date), 
    im.custid_31, 
    im.ordnum_31, 
    im.lnetot_31, 
    im.tax1_31, 
    lnetot_31 - orddsc_31, 
    im.frtamt_31, 
    im.taxtot_31 
+0

ой, приятно поймать! –

+0

Спасибо GurV, все равно никаких изменений, но каждый бит помогает. – Onyxtacular

+0

@Onyxtacular - попробуйте пожалуйста – GurV

0

Вы используете ID.STK_32 из таблицы Invoice_Detail в предложении группировки. Если значение ID.STK_32 «LITERTRE», «SAMPLE» и другое могут отображаться для одного счета-фактуры, это приведет к дублированию.