首页 > 解决方案 > 如何将两个完全不同的 SQL 查询组合成一个结果

问题描述

我对 SQL 查询很陌生,可以使用一些帮助。

我有两个不同的 SQL 查询,我希望两者的结果都在一个结果中。

查询一:

SELECT 
    gbkmut.bkstnr_sub, 
    MAX(orkrg.refer) AS oms25, 
    MAX(gbkmut.docnumber) AS YourRef, 
    MIN(gbkmut.datum) AS datum, 
    cicmpy.debcode AS delv_debnr, 
    MAX(cicmpy.cmp_name) AS cmp_name,
    MAX(gbkmut.datum) AS latest_deldat, 
FROM 
    gbkmut 
INNER JOIN 
    orkrg ON gbkmut.bkstnr_sub = orkrg.ordernr
INNER JOIN
    cicmpy ON orkrg.verzdebnr  = cicmpy.debnr
INNER JOIN 
    items ON gbkmut.artcode = items.itemcode AND items.type <> 'P'
INNER JOIN 
    magaz ON gbkmut.warehouse = magaz.magcode AND magaz.blokkeer = 0 
WHERE 
    (gbkmut.transsubtype IN ('B','H')
     AND gbkmut.freefield1 = 'V'
     AND gbkmut.Blockitem = 0
     AND gbkmut.afldat <= GETDATE()) 
    AND gbkmut.Checked = 1 
    AND (orkrg.ordbv_afdr = 0 OR (orkrg.ordbv_afdr = 1 AND orkrg.ordbv_afgd = 1)) 
GROUP BY 
    gbkmut.bkstnr_sub, 
    gbkmut.afldat, 
    cicmpy.debcode
ORDER BY 
    gbkmut.bkstnr_sub DESC

查询 2:

SELECT TOP 1000 
    [Debtor code],
    [Outstanding Amount]
FROM 
    [456].[dbo].[GRV_DebtorOutstanding]

[债务人代码] 和 cicmpy.debcode 对于连接是相同的

两个查询的一些示例结果:

查询 1 列:

Ordernumber, Order description, Your reference, Orderdate, Debtor code, Debtor name, Order delivery date

   20093    NULL    Bestel.: 20093  2018-07-31 00:00:00.000                60089    Restaurant Enkhuizen    2018-07-31 00:00:00.000
   20092    NULL    Bestel.: 20092  2018-07-31 00:00:00.000                60089    Restaurant Enkhuizen    2018-07-31 00:00:00.000
   20088    NULL    Bestel.: 20088  2018-07-05 00:00:00.000                60105    Brasserie Pigalle   2018-07-05 00:00:00.000

查询 2:

列:债务人代码、未偿还总额

Debtor code Outstanding Amount
               60086    -30,65
               60092    -121
               60089    -5000
               60130    1000

我想将未偿总额添加到第一个查询中。

我尝试使用子选择,但出现错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

由于不同的列,工会也可能是不可能的。

我想将其用于报告目的,当然可以通过 Excel 和 vlookup 解决它,但我想在 SQL 中完成它以了解有关 SQL 的更多信息。

任何帮助都会很棒。谢谢

标签: sqlsql-server

解决方案


将它们都放在子查询中并将它们连接在一起

SELECT * FROM
(
SELECT 
    gbkmut.bkstnr_sub, 
    MAX(orkrg.refer) AS oms25, 
    MAX(gbkmut.docnumber) AS YourRef, 
    MIN(gbkmut.datum) AS datum, 
    cicmpy.debcode AS delv_debnr, 
    MAX(cicmpy.cmp_name) AS cmp_name,
    MAX(gbkmut.datum) AS latest_deldat, 
FROM 
    gbkmut 
INNER JOIN 
    orkrg ON gbkmut.bkstnr_sub = orkrg.ordernr
INNER JOIN
    cicmpy ON orkrg.verzdebnr  = cicmpy.debnr
INNER JOIN 
    items ON gbkmut.artcode = items.itemcode AND items.type <> 'P'
INNER JOIN 
    magaz ON gbkmut.warehouse = magaz.magcode AND magaz.blokkeer = 0 
WHERE 
    (gbkmut.transsubtype IN ('B','H')
     AND gbkmut.freefield1 = 'V'
     AND gbkmut.Blockitem = 0
     AND gbkmut.afldat <= GETDATE()) 
    AND gbkmut.Checked = 1 
    AND (orkrg.ordbv_afdr = 0 OR (orkrg.ordbv_afdr = 1 AND orkrg.ordbv_afgd = 1)) 
GROUP BY 
    gbkmut.bkstnr_sub, 
    gbkmut.afldat, 
    cicmpy.debcode
ORDER BY 
    gbkmut.bkstnr_sub DESC
) T1
JOIN 
(
    SELECT TOP 1000 
        [Debtor code],
        [Outstanding Amount]
    FROM 
        [456].[dbo].[GRV_DebtorOutstanding]
) T2 ON T2.[Debtor code] = T1.delv_debnr

推荐阅读