【问题标题】:How to merge Sql two sql query result display merge in one displaysql如何合并两个sql查询结果显示合并在一个显示中
【发布时间】:2017-04-10 14:35:03
【问题描述】:

我想在一个屏幕上并排合并sql查询结果

示例:

Barcode1    Barcode2
888            33

这可能吗?

非常感谢。

SELECT BARCODE AS BARCODE2  
FROM LG_001_UNITBARCODE, LG_001_ITEMS
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
  AND ITEMREF= 17 AND LINENR = 2;


SELECT BARCODE AS BARCODE3 
FROM LG_001_UNITBARCODE, LG_001_ITEMS 
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
  AND ITEMREF= 17 AND LINENR = 3;

【问题讨论】:

  • 这是一个很好的起点。 spaghettidba.com/2015/04/24/… 你也应该开始使用 ANSI-92 风格的连接,它们已经存在 25 年了。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…
  • 每个子查询是否总是只返回 1 行?如果多行它们相关的顺序是否重要? “完全外连接并使用 row_number() 到窗口函数将它们联系在一起”是一种方法。
  • @xQbert: 也许Cross Join 将两个查询的所有值结合起来:V
  • 也许,但我怀疑他们是否真的想要所有价值的所有价值,这就是我问的原因;我很少看到需要/使用交叉连接。
  • 等待OP的回应.....

标签: sql-server merge


【解决方案1】:

一种方法是使用子选择,如下所示:

SELECT BARCODE AS BARCODE2 ,
        (
            SELECT BARCODE AS BARCODE3 
            FROM LG_001_UNITBARCODE, LG_001_ITEMS 
            WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
                AND ITEMREF= 17 AND LINENR = 3
        ) as BARCODE3
FROM LG_001_UNITBARCODE, LG_001_ITEMS
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
AND ITEMREF= 17 AND LINENR = 2;

【讨论】:

  • 当子查询返回超过 1 个结果时,您的查询就会出错。
  • 嗯,在当前情况下,只返回一个值。如果还有更多,应该指定以及 mrc 用户想要处理它的方式(作为逗号分隔值或任何其他方式..)如果从子查询返回更多值,你是对的,它需要以不同的方式处理:)
【解决方案2】:

如果我们可以假设如果存在多行并且每个表的结果数量不同(一个返回 3 条记录,另一个返回 5 条记录),并且它们应该按照每个表的条形码顺序相关...... 我们可以使用 2 个公用表表达式和一个 row_number() 分析。这样,如果确实存在多行,则它们都基于分配的行号相关,并且如果一个结果集的行数多于另一个,则会出现空值。

但是,如果是 1-1,这仍然有效。

WITH A as (SELECT BARCODE AS BARCODE2, row_number() over (order by barcode) RN 
           FROM LG_001_UNITBARCODE, LG_001_ITEMS
           WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
             AND ITEMREF= 17 
             AND LINENR = 2),
     B as (SELECT BARCODE AS BARCODE3, row_number() over (order by barcode) RN 
           FROM LG_001_UNITBARCODE, LG_001_ITEMS 
           WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
             AND ITEMREF= 17 
             AND LINENR = 3)

SELECT A.Barcode2, B.Barcode3 
FROM A
FULL OUTER JOIN B 
 on A.RN = B.RN
;

Row_number() RN 为我们提供了一种在条形码 asc 序列中关联表格的方法。如果一个数据集的记录多于另一个数据集,则完全外连接允许我们处理。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2020-07-19
    • 2021-09-06
    • 2016-05-26
    相关资源
    最近更新 更多