【问题标题】:Summarizing count of multiple talbes in one row or column汇总一行或一列中多个表的计数
【发布时间】:2015-07-02 15:03:10
【问题描述】:

我设计了一个迁移脚本,作为最后一个序列,我正在运行以下两行代码。

select count(*) from Origin
select count(*) from Destination

但是,我想将这些数字显示为同一个表格中的单元格。我还没有决定是否最适合将它们作为单独的行放在一列中或将相邻列放在一列中,但我确实希望它们在同一个表中。

我如何从这些选择中选择东西到垂直/水平排列中?

我已经尝试过 select 他们有和没有括号,但 id 没有工作(可能是因为缺少 from)...

这个问题与another one有关,但在两个方面有所不同。首先,它更中肯,更清楚地说明了问题。其次,它询问所选值的水平和垂直排列,而链接问题仅涉及前者。

select 
  select count(*) from Origin,
  select count(*) from Destination

select(
  select count(*) from Origin,
  select count(*) from Destination)

【问题讨论】:

  • 嗯... Downvoter - 想让我知道如何改进问题?我很高兴...
  • 如果您发布您尝试过的代码,我们可以解释为什么它不能作为一种学习体验。
  • @TabAlleman 我尝试在两行之前添加单词 select 并在它们之间添加一个逗号字符。这就是我能想到的。您还希望我发布代码吗?请查看编辑...
  • 您尝试的问题是子选择需要放在括号中(每个都在自己的括号集中)。给它们一个别名也是一个好主意,否则它们在结果集中将没有列名。

标签: sql-server


【解决方案1】:

您需要将两个 select 语句嵌套在一个主(顶部)SELECT 下,以便获得包含两个表计数的一行:

SELECT
    (select count(*) from Origin) AS OriginCount,
    (select count(*) from Destination) AS DestinationCount

SQLFiddle for the above query

我希望这是您正在寻找的,因为您提到的“同一张桌子”有点令人困惑。 (我假设您指的是结果集)

或者,您可以使用 UNION ALL 返回两个单元格,其中包含两个表格的计数。

SELECT COUNT(*), 'Origin' 'Table' FROM ORIGIN
UNION ALL
SELECT COUNT(*), 'Destination' 'Table' FROM Destination

SQLFiddle with UNION ALL

SQLFiddle with UNION

我建议添加第二个文本列,以便您知道每个数字对应的表格。

相对于简单的UNIONUNION ALL 命令每次都会返回两行。如果两个表中的行数相同(相同数量),UNION 命令将生成单个结果(单个单元格)。

【讨论】:

  • 这个答案既精心制定又完整。您还添加了指向小提琴的链接,应该是 +2(我希望其他人能为此做出贡献,因为我只能为您提供 +1)。我也不知道那里有 SQL 的小提琴,所以我学到的比我要求的要多,所以应该是 +3,也许......
  • @KonradViltersten 很高兴它对您有帮助!
  • 请您检查一下您是否仍然可以访问小提琴。我不能用我的电脑来做。它说“请构建架构”等......
  • @KonradViltersten 我刚刚检查了链接,它们都很好。
  • 确认它们现在工作正常。之前在网络空间中一定是有些怪异……
【解决方案2】:

...或者如果您想要垂直...

select 'OriginalCount' as Type,  count(*)
  from origin
union
select 'DestinationCount' as Type,  count(*)
  from destination

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 2022-08-16
    • 2017-07-28
    • 2016-06-15
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多