2017-01-06 7 views
-4

Я использую студию управления Microsoft Sql Server.SQL-запрос SUM() AND GROUP BY для 2 столбцов в таблице

У меня был смешанный успех, создав налоговый отчет для определенного типа счета-фактуры, который у меня есть.

У меня есть суммы менее 6%, другие суммы менее 13,5%, а последняя сумма составляет всего 6% и 13,5%.

Я получил свой ответ в результатах, но отображаются две разные строки для каждого счета-фактуры. Один для значений 6%, а другой для значений 13,5%.

Мне нужно как-то объединить эти две строки в одну строку для каждого счета-фактуры.

My Sql запрос выглядит следующим образом:

SELECT tran_no , 
     tran_date , 
     (SELECT SUM(edetail_amt) 
      WHERE  edetail_taxid = '6008U_=' 
     ) AS '6% amt' , 
     (SELECT SUM(edetail_per) 
      WHERE  edetail_taxid = '6008U_=' 
     ) AS '6% vat' , 
     (SELECT SUM(edetail_amt) 
      WHERE  edetail_taxid = '6008U_>' 
     ) AS '13.5% amt' , 
     (SELECT SUM(edetail_per) 
      WHERE  edetail_taxid = '6008U_>' 
     ) AS '13.5% vat' , 
     (SELECT SUM(edetail_amt + edetail_per) 
      WHERE  edetail_taxid IN ('6008U_=', '6008U_>') 
     ) AS 'Net Total' 
FROM h_edetail 
     INNER JOIN h_tran ON edetail_tranid = tran_kid 
WHERE tran_trantype = 'PI' 
     AND tran_date = '2016-11-03 00:00:00.000' 
GROUP BY tran_no , 
     tran_date , 
     edetail_taxid 
ORDER BY tran_no; 

Скриншот запроса вместе с результатами являются:

Query and results

+2

разместить запрос как текст –

+0

выберите tran_no, tran_date, (выберите сумму (edetail_amt) где edetail_taxid = '6008U_ =') как '6% амт', (выберите сумму (edetail_per), где edetail_taxid = '6008U_ =') как «6% vat», (выберите сумму (edetail_amt), где edetail_taxid = '6008U_>'), как '13 .5% amt ', (выберите сумму (edetail_per), где edetail_taxid =' 6008U_> ') как '13 .5% vat', (выберите sum (edetail_amt + edetail_per), где edetail_taxid в ('6008U _ =', '6008U_>')) в качестве 'Total Total' from h_edetail internal join h_tran on edetail_tranid = tran_kid где tran_trantype = 'PI' и tran_date = '2016-11-03 00: 00: 00.000' группа по tran_no, tran_date, edetail_ta xid order by tran_no – Adnan

+1

Ничего в вашем запросе не называется «счет-фактура», поэтому вопрос совершенно неясен. Вот почему данные выборки и желаемые результаты так важны. –

ответ

0

Если не ошибаюсь, вы ищете для этого

SELECT tran_no, 
     tran_date, 
     Sum(case when edetail_taxid = '6008U_=' then edetail_amt else 0 end) AS '6% amt', 
     Sum(case when edetail_taxid = '6008U_=' then edetail_per else 0 end) AS '6% vat', 
     Sum(case when edetail_taxid = '6008U_>' then edetail_amt else 0 end) AS '13.5% amt', 
     Sum(case when edetail_taxid = '6008U_>' then edetail_per else 0 end) AS '13.5% vat', 
     Sum(case when edetail_taxid IN ('6008U_=', '6008U_>') then edetail_amt + edetail_per else 0 end) AS 'Net Total' 
FROM h_edetail 
     INNER JOIN h_tran 
       ON edetail_tranid = tran_kid 
WHERE tran_trantype = 'PI' 
     AND tran_date = '2016-11-03 00:00:00.000' 
GROUP BY tran_no, 
      tran_date 
ORDER BY tran_no 

Из-за select sum(edetail_amt) where edetail_taxid='6008U_=', вы должны добавить edetail_taxid в group by, что является причиной дублирования записей. Вы можете сделать это путем добавления case внутри SUM агрегат

+0

Спасибо, что вы так много ..... – Adnan

+0

его решила ......... . – Adnan

+0

@Adnan, то почему бы не отметить ответ как правильный? – jonlink