Ниже приведены две таблицы.И я также показал требуемый результат ниже.
ТАБЛИЦА A
+------------+--------------+
| InvoiceNo. | InvoiceTotal |
+------------+--------------+
| 1 | 190 |
| 2 | 360 |
| 3 | 170 |
| 4 | 269 |
| 5 | 30 |
+------------+--------------+
ТАБЛИЦА B
+------------+--------------+------+-----------+
| InvoiceNo. | TaxName | Tax% | TaxAmount |
+------------+--------------+------+-----------+
| 1 | State 5% | 5 | 9.5 |
| 1 | Local 5% | 5 | 9.5 |
| 1 | State 7% | 7 | 13.3 |
| 1 | Local 7% | 7 | 13.3 |
| 2 | National 10% | 10 | 36 |
| 3 | State 4% | 4 | 6.8 |
| 3 | Local 4% | 4 | 6.8 |
| 4 | State 6% | 6 | 16.14 |
| 4 | Local 6% | 6 | 16.14 |
| 5 | National 14% | 14 | 4.2 |
+------------+--------------+------+-----------+
Обязательный ВЫХОД
Группировка по (InvoiceNo, Tax%) и сумме (Tax%, TaxAmount) Но
Если TaxName похож на «State» или «Local», то выполняетсяв столбец «Штат + местный» с суммой штатов + местный налог%. Если TaxName похож на «National», то переходит в столбец «National»
+-----------+--------------+-------------+----------+--------------------+----------------+
| InvoiceNo | InvoiceTotal | State+Local | National | State+Local_Amount | NationalAmount |
+-----------+--------------+-------------+----------+--------------------+----------------+
| 1 | 120 | 10 | 0 | 19 | 0 |
| 1 | 120 | 14 | 0 | 26.6 | 0 |
| 2 | 360 | 0 | 10 | 0 | 36 |
| 3 | 85 | 8 | 0 | 13.6 | 0 |
| 4 | 269 | 12 | 0 | 32.28 | 0 |
| 5 | 30 | 0 | 14 | 0 | 4.2 |
+-----------+--------------+-------------+----------+--------------------+----------------+
. Вот что я делаю
CREATE TABLE #tableA(InvoiceNo varchar(100), InvoiceTotal float)
insert into #tableA values
('1',190),
('2',360),
('3',170),
('4',269),
('5',30)
CREATE TABLE #tableB(InvoiceNo varchar(100), TaxName varchar(25), TaxPercentile float, TaxAmount float)
INSERT INTO #tableB VALUES
('1','State 5%',5, 9.5),
('1','Local 5%',5, 9.5),
('1','State 7%',7, 13.3),
('1','Local 7%',7, 13.3),
('2','National 10%',10, 36),
('3','State 4%',4, 6.8),
('3','Local 4%',4, 6.8),
('4','State 6%',6, 16.14),
('4','Local 6%',6, 16.14),
('5','National 14%',14, 4.2)
select B.InvoiceNo, A.InvoiceTotal,
case when TaxName like '%State%' or TaxName like '%Local%' then sum(b.TaxPercentile) else 0 End as [StateLocal],
case when TaxName like '%National%' then sum(b.TaxPercentile) else 0 End as [National],
case when TaxName like '%State%' or TaxName like '%Local%' then sum(b.TaxAmount) else 0 End as [StateLocal_Amount],
case when TaxName like '%National%' then sum(b.TaxAmount) else 0 End as [NationalAmount]
from #tableB B
Left join #TableA A on a.InvoiceNo = b.InvoiceNo
Group by b.InvoiceNo, A.InvoiceTotal
-- if i include "TaxName" in group by then it does not returns required output
-- if i do not include "TaxName" in Group by then it gives error saying i have to include TaxName in group by
Если я включаю «TaxName» в группу к тому времени, он не возвращает требуемый вывод.
Если я не включаю «TaxName» в группу к тому времени, выдает ошибку, говорящую, что у меня естьвключить TaxName в группу по.
Можно ли это сделать с помощью Разделения поверх в случае, когда выписка?Если да, то как или как обстоят дела?