Вставить несколько строк для каждой строки в другой таблице - PullRequest
0 голосов
/ 08 мая 2020

Я ищу запрос SQL, который вставляет несколько строк данных в таблицу B для каждой строки в таблице A

Таблица A

ID       BillNo       TAX       Amount      TotalAmount 
-------------------------------------------------------
1        001           5        100          105
2        002           20       400          420

И мне нужны данные для вставки в таблицу B в таком формате

Таблица B

ID   Type        Billno     Amount
-----------------------------------
1    Sales       001        100
2    Cash        001        105
3    Tax         001          5
4    sales       002        400
5    Cash        002        420
6    Tax         002         20

Я пробовал это

insert into tableB 
    select 'Sales', billno, Amount 
    from TableA

insert into tableB 
    select 'Cash', billno, TotalAmount 
    from TableA

insert into tableB 
    select 'Tax', billno, tax 
    from TableA

Но сначала вставляются все строки «продаж», затем « ca sh ', затем' Налог '. Я не получаю его в комплекте. Как это:

1    Sales       001        100
2    sales       002        400
3    Cash        001        105
4    Cash        002        420
5    Tax         001          5
6    Tax         002         20

Пожалуйста, помогите мне с решением.

Ответы [ 4 ]

2 голосов
/ 08 мая 2020

Можете ли вы это проверить sql:

INSERT INTO `tableB` (`Type`, `Billno`, `Amount`)
SELECT 'Sales', `billno`, `Amount` 
FROM `TableA` 
1 голос
/ 08 мая 2020

Что значит «получить в комплекте»? Хотели бы вы вставить его по порядку? Затем вы можете сделать что-то вроде этого:

объединить запросы в объединение и отсортировать его

insert into tableB ([Type], BillNo, AMount)
select 'sales' as [Type], BillNo, amount as AMount from TableA union
select 'cash' as [Type], BillNo, TotalAmount as AMount from TableA union
select 'tax' as [Type], BillNo, tax as AMount from TableA
order by BillNo, [Type]
0 голосов
/ 08 мая 2020

Я бы использовал apply:

insert into tableB (Type, BillNo, AMount)
    select tt.type, t.billno, tt.amount
    from table t cross apply
         ( values ('sales', t.Amount),
                  ('cash', t.TotalAmount),
                  ('Tax', t.tax) 
         ) tt(type, amount)
    order by t.billno;
0 голосов
/ 08 мая 2020

Может быть, у вас такой запрос:

    select t.Type, billno, 
        case t.Type 
            when 'Sales' then Amount 
            when 'Cash' then TotalAmount 
            when 'Tax' then tax 
        end as Amount
    from TableA
    cross join (values ('Sales'), ('Cash'), ('Tax')) as t(Type)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...