需要合并两个查询

时间:2019-02-28 16:33:18

标签: sql sql-server pivot-table sql-function

我有一个查询,没有什么特别的。基本选择和大量联接,但没有高级内容。

我有第二个查询,它使用光标和数据透视。这与我以前做过的查询(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]

我尝试查看子查询,但是那些子查询似乎对我的工作有很大的限制。

1 个答案:

答案 0 :(得分: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,适用于大多数RDBMS。