【问题标题】:Combining tables with same columns in SQL Server在 SQL Server 中组合具有相同列的表
【发布时间】:2016-08-01 14:25:35
【问题描述】:

我试图在 SQL Server 中合并两个具有相同列的表。

就个人而言,我的查询工作正常:

Select 
    _NAME, COUNT(_NAME) as Occurrences
From 
    SP6815_NOK
Where 
    _VALUE = 1
Group By 
    _NAME 
Order By 
    Occurrences desc

Select 
    _NAME, COUNT(_NAME) as Occurrences
From 
    SP6814_NOK
Where 
    _VALUE = 1
Group By 
    _NAME
Order By 
    Occurrences desc

导致:

Occurrences for SP6815_NOK

Occurrences for SP6814_NOK

我需要查询来执行我的个人查询中列出的确切过滤器,但每次我尝试“加入”子句或简单地在“来自”语句下列出两个表时,我都会收到一个模棱两可的列错误。

我认为这可能是因为两个表共享某些消息或“_NAMES”,但我仍然需要它来计算出现次数而不是覆盖它们。有人可以帮忙吗?

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server? (不要标记未涉及的产品。)
  • 执行 UNION ALL 而不是加入。
  • 我删除了不兼容的数据库标签。请添加回适合您实际使用的数据库的标签。
  • 从截图中,它的 SQL Server
  • @jarlh 我正在使用 MS SQL Server 2016

标签: sql sql-server union sql-server-2016


【解决方案1】:

如果您需要分隔行中的结果,请使用联合

Select _NAME,COUNT(_NAME) as Occurrences
From SP6815_NOK 
Where _VALUE = 1
Group By _NAME 
union
Select _NAME,COUNT(_NAME)
From SP6814_NOK
Where _VALUE = 1
Group By _NAME
Order By Occurrences desc

如果您想要所有行(也重复),请使用 union all 如果您想要不同的行,请仅使用 union

否则,如果您希望结果在同一行上,请使用完全限定名称

Select SP6815_NOK._NAME,COUNT(SP6815_NOK._NAME)   as Occurrences,  SP6814_NOK._NAME,COUNT(SP6814_NOK._NAME) as Occurrences2
From SP6815_NOK 
INNER JOIN SP6814_NOK ON SP6815_NOK._VALUE = SP6814_NOK._VALUE
Where _VALUE = 1
Group By SP6815_NOK._NAME,  SP6814_NOK._NAME
Order By Occurrences desc

【讨论】:

    【解决方案2】:

    简单的UNION ALL 不会返回按您似乎需要的方式排序的行。

    试试这个:

    编辑:不需要子选择

    我的第一次尝试是复杂化。我不知道哪个版本的 SQL Server 允许在 ORDER BY 中使用列别名。如果这个更简单的版本不适合您并且您使用的是旧版本的 SQL Server,您可能会查看编辑历史并找到以前的代码...

    Select 'SP6815_NOK' AS SourceTable
            ,NAME
            ,COUNT(_NAME) as Occurrences
    From SP6815_NOK 
    Where _VALUE = 1
    Group By _NAME 
    
    UNION ALL
    
    Select 'SP6814_NOK' AS SourceTable
            ,NAME
            ,COUNT(_NAME) as Occurrences
    From SP6814_NOK 
    Where _VALUE = 1
    Group By _NAME 
    
    ORDER BY SourceTable,Occurrences
    

    更新:ORDER BY 中的列别名...

    看来,这是 possible already in SQL Server 2005...,但不在 WHERE... 我不知何故错过了 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2017-04-23
      • 2018-08-13
      相关资源
      最近更新 更多