2017-02-20 1 views
-2

У меня есть две таблицы темп, из которых нужно объединить оба из них, как показано ниже. Есть ли способ сделать это? В конечном итоге должны состоять из новых столбцов на основе вторых таблиц Tax Type. Количество типов налогов неизвестно. Время от времени оно может меняться.Объедините две таблицы и создайте новый столбец во второй таблице результатов, основанной на результатах

Table : Work 
    +-----------+----------------+ 
    | WorkId |  Work  | 
    +-----------+----------------+ 
    | 1080  | "Work One" | 
    | 1081  | "Work Two" | 
    | 1082  | "Work Tree" | 
    +-----------+----------------+ 

Table : TaxDetails 
    +--------+----------+---------+---------+ 
    | Taxid | TaxType | Amt | WorkId | 
    +--------+----------+---------+---------+ 
    | 1 | VAT | 120.0 | 1080 | 
    | 1 | VAT | 300.0 | 1081 | 
    | 2 | S.Tax | 150.0 | 1083 | 
    | 2 | S.Tax | 101.0 | 1080 | 
    +--------+----------+---------+---------+ 

Final Result : 
    +--------+-------------+-------+--------+ 
    | WorkId | Work  | Vat | S.Tax | 
    +--------+-------------+-------+--------+ 
    | 1080 | "Work One" | 120.0| 101.0| 
    | 1081 | "Work Two | 300.0| 0.0 | 
    | 1082 | "Work Three"| 0.0 | 0.0 | 
    +--------+-------------+-------+--------+ 
+1

Пожалуйста, форматированный текст - не изображения. – jarlh

+0

Пожалуйста, прочитайте [Как задать хороший вопрос SQL] (http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056) и [Как создать MCVE] (http://stackoverflow.com/help/mcve) – Shnugo

+0

Как 300 S.Tax? – Paparazzi

ответ

0

Может быть сделано с помощью простых операторов case, псевдонимов столбцов и подзаголовка для получения итогов налога. ISNULL возвращает 0, если нет налога значения не доступны для WorkID:

SELECT 
W.WorkId 
,Work 
,ISNULL(VAT,0) AS 'VAT' 
,ISNULL(Service_Tax,0) AS 'Service Tax' 
FROM Work AS W 
LEFT JOIN (
    SELECT 
    WorkID 
    ,SUM(CASE TaxType WHEN 'VAT' THEN amt ELSE 0 END) AS VAT 
    ,SUM(CASE TaxType WHEN 'S.Tax' THEN amt ELSE 0 END) AS Service_Tax 
    FROM TaxDetails 
    GROUP BY workID 
    ) AS T 
    ON w.workID = T.WorkID 
+0

виды налогов будут время от времени меняться – Libin

+0

Я добавил решение, основанное на описании налогов. – TJB

+0

Необходимо создать столбец в конечном результате на основе типов налогов во второй таблице, а значения должны быть суммой для соответствующих типов налогов. – Libin

0
select w.WorkId, w.work 
    , isnull(v.Amt,0) as Vat 
    , isnull(s.Amt,0) as Stax 
from work w 
left join TaxDetails v 
on v.WorkId = w.WorkId 
and v.Taxid = 1 
left join TaxDetails s 
on s.WorkId = w.WorkId 
and s.Taxid = 2 
+0

Этот ответ был помечен, по-видимому, потому что нет сопроводительного текста. Этот ответ выглядит достаточно простым для меня, что он не требует этого. –