【问题标题】:How to combine two query's results into one row?如何将两个查询结果合并为一行?
【发布时间】:2014-12-01 22:02:07
【问题描述】:

我有两个查询,每个查询返回一个结果,即一个数字

Select Count(*) as StockCountA from Table_A where dept='AAA'

结果

StockCountA 
550

.

Select Count(*) as StockCountB from Table_B where dept='BBB'

结果

StockCountB 
450

我希望将两个结果合并为一行记录,即

| StockCountA | StockCountB    
| 550         | 450

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你可以使用:

    select
    (Select Count(*) as StockCountA from Table_A where dept='AAA') as StockCountA,
    (Select Count(*) as StockCountB from Table_B where dept='BBB') as StockCountB
    

    说明:您可以在 select 语句中选择单个值作为字段,因此您可以编写类似的内容

    select
      x.*,
      (select Value from Table_Y y) as ValueFromY
    from
      Table_X x
    

    这仅适用于scalar queries,这意味着子查询应该正好有 1 列,最多 1 行。 0 行 ValueFromY 将返回 NULL 并且超过 1 行,查询将失败。

    select(在 SQL Server、MySQL 和可能的其他服务器中)的一个附加功能是您可以只选择值而无需指定表,如下所示:

    Select
      3.14 as MoreOrLessPI
    

    您可以将这两个事实结合起来,将两个计数合并为一个结果,方法是编写如下所示的查询:

    Select
      (Select query that returns at most 1 row) as Result1,
      (Select another query that returns at most 1 row) as Result2
    

    【讨论】:

    • 谢谢,如果您了解基础知识,那么您就知道自己在做什么,否则您就是专家 :)
    • 是的,这就是我决定添加一点解释的原因。很难找到正确的文档,我不知道要查找什么。 :)
    【解决方案2】:

    这应该会给你想要的结果:

    SELECT * FROM(
    (Select Count(*) as StockCountA from Table_A where dept='AAA') StockCountA ,
    (Select Count(*) as StockCountB from Table_B where dept='BBB') StockCountB
    );
    

    【讨论】:

    • 其他答案的有趣变化。您基本上使用旧的(1992 年之前)连接语法来交叉连接两个查询。不过结果是一样的。
    【解决方案3】:

    虽然并不总是最佳实践,但可以进行 CROSS JOIN..

    SELECT
    COUNT(Table_A.SOME_COLUMN) as StockCountA
    ,COUNT(Table_B.SOME_COLUMN) as StockCountB
    FROM Table_A, Table_B WHERE Table_A.dept='AAA' AND Table_B.dept='BBB'
    

    【讨论】:

      【解决方案4】:

      试试下面的SQL:

      select (Select Count(*) as StockCountA from Table_A where dept='AAA')  StockCountA, 
             (Select Count(*) as StockCountB from Table_B where dept='BBB')  StockCountB
      

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多