Нужно объединить два запроса

У меня есть один запрос, в котором нет ничего особенного. Базовый выбор и множество объединений, но ничего продвинутого.

У меня есть второй запрос, который использует курсор и поворот. Это самый сложный запрос, который я когда-либо делал (SQL noob). Что я хотел бы сделать, так это вставить второй запрос в первый и каким-то образом использовать выходные данные строки первого запроса во втором. Запутанно, я знаю.

Второй запрос выглядит так:

declare @num as varchar(50)
declare pno cursor for
  select
    p.part_key
  from
    part_table as p
  where
    p.part_status = "Prod"

open pno
fetch next from pno into @num

while @@fetch_status = 0
begin
  select
     @num as "Part Number",
     [id1] as "Data1",
     [id2] as "Data2",
     [id3] as "Data3"
  from
     select
       t1.qty * t2.cost as ExtCost,
       t2.opcode as opcode
     from
       table1 as t1
     join table2 as t2
       on t1.id = t2.id
     where
       t1.part_key = @num
  ) t
  pivot
    (sum(extcost) for opcode in [id1], [id2], [id3])) pvt

  fetch next from pno into @num
end
close pno
deallocate pno

Этот запрос выдает именно то, что мне нужно, и это единственный известный мне способ получить эту информацию. И первый запрос выдает другую информацию, но ссылается на ту же группу «частей», которые я выбираю в этом сводном запросе. Итак, что я хотел бы сделать, так это для каждой строки (т.е. part_key) в первом запросе я хочу выдать данные из второго запроса, связанные с этим part_key.

Так, например, первый запрос выдает что-то вроде этого:

PART KEY | q1DATA1 | q1DATA2

И второй запрос выдает:

PART KEY | [id1] | [id2] | [id3]

Я хочу сделать следующее:

PART KEY | q1DATA1 | q1DATA2 | [id1] | [id2] | [id3]

Я пытался смотреть на подзапросы, но они, кажется, довольно ограничивают то, что я делаю.

Пожалуйста, прочитайте первый абзац информация о теге sql и редактировать вашего вопроса соответственно.

Zohar Peled 28.02.2019 17:34
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
68
1

Ответы 1

Оба запроса можно упростить в один, просто добавив еще один JOIN ко второму запросу. Я понимаю, что эти пункты FROM/WHERE должны помочь:

FROM
    part_table as p
    INNER JOIN table1 AS t1 ON t1.part_key = p.part_key
    INNER JOIN table2 AS t2 ON t2.id = t1.id
WHERE
    p.part_status = 'Prod'

Когда дело доходит до поворота вывода, я подозреваю, что то, чего вы пытаетесь достичь, можно сделать с помощью условная агрегация.

SELECT
    p.part_key,
    p.q1DATA1,
    p.q1DATA2,
    SUM(CASE WHEN t2.opcode = '[id1]' THEN t1.qty * t2.cost ELSE 0 END) id1,
    SUM(CASE WHEN t2.opcode = '[id2]' THEN t1.qty * t2.cost ELSE 0 END) id2,
    SUM(CASE WHEN t2.opcode = '[id3]' THEN t1.qty * t2.cost ELSE 0 END) id3,
FROM
    part_table as p
    INNER JOIN table1 AS t1 ON t1.part_key = p.part_key
    INNER JOIN table2 AS t2 ON t2.id = t1.id
WHERE
    p.part_status = 'Prod'
GROUP BY 
    p.part_key,
    p.q1DATA1,
    p.q1DATA2

NB: это стандартный ANSI SQL, который должен работать на большинстве СУБД.

Другие вопросы по теме