【问题标题】:SQL - Execute SQL query on SQL querySQL - 对 SQL 查询执行 SQL 查询
【发布时间】:2012-07-25 14:51:38
【问题描述】:

是否可以在另一个 SQL 查询上运行 SQL 查询? 我有一个 SQL 查询,它使用 Union All 子句将许多列编译为一个。我需要使用 group 子句,但您会发现这是不可能的。有没有办法在这个上运行另一个 SQL 查询?

查询:

Select Ins1 as Insurance

From InsAuth2
WHERE Ins1 IS NOT NULL
Group By Ins1
Union All
Select Ins2 as Insurance
From InsAuth2
WHERE Ins2 IS NOT NULL
Group By Ins2
Union All
Select Ins3 as Insurance
From InsAuth2
WHERE Ins3 IS NOT NULL
Union All
Select Ins4 as Insurance
From InsAuth2
WHERE Ins4 IS NOT NULL
Union All
Select Ins5 as Insurance
From InsAuth2
WHERE Ins5 IS NOT NULL

我需要能够从这个已编译的列中选择唯一值。我可以在每个语句中使用 group by,但这只会从原始列返回唯一值。如果一个列的唯一值对另一列也是唯一的,则编译的列可能不具有所有唯一值。因此,我必须在这个查询上运行另一个 SQL 查询。有什么建议吗?

【问题讨论】:

  • 是的,你可以。只需在适当的列上使用 group by 进行外部查询
  • 如果您只是将查询放在 From 中,则可以对从 select 返回的列表执行查询。

标签: sql


【解决方案1】:

使用内部查询,即

SELECT *
FROM
(
    YourQueryHere
) Inn
GROUP BY YourColumnHere

【讨论】:

    【解决方案2】:

    使用派生表和 distinct:

    select distinct Insurance
    from
    (
      Select Ins1 as Insurance
      From InsAuth2
      WHERE Ins1 IS NOT NULL
      Union All
      Select Ins2 as Insurance
      From InsAuth2
      WHERE Ins2 IS NOT NULL
      ...
    ) table_alias
    

    【讨论】:

      【解决方案3】:

      如果您使用UNION 而不是UNION ALL,它将过滤掉重复项

      Select Ins1 as Insurance
      From InsAuth2
      WHERE Ins1 IS NOT NULL
      Group By Ins1
      Union
      Select Ins2 as Insurance
      From InsAuth2
      WHERE Ins2 IS NOT NULL
      Group By Ins2
      Union
      Select Ins3 as Insurance
      From InsAuth2
      WHERE Ins3 IS NOT NULL
      Union
      Select Ins4 as Insurance
      From InsAuth2
      WHERE Ins4 IS NOT NULL
      Union
      Select Ins5 as Insurance
      From InsAuth2
      WHERE Ins5 IS NOT NULL
      

      【讨论】:

        【解决方案4】:

        尝试使用 UNION 而不是 UNION ALL

        谢谢

        【讨论】:

        • 应该是评论。
        • 尝试以下操作:
        • 尝试以下操作: 选择 Ins1 作为 InsAuth2 的保险 WHERE Ins1 不为空 Union 选择 Ins2 作为 InsAuth2 的保险 WHERE Ins2 不为空 Union 选择 Ins3 作为 InsAuth2 的保险 WHERE Ins3 不为空 Union 选择 Ins4作为来自 InsAuth2 的保险,其中 Ins4 不为空 Union 选择 Ins5 作为来自 InsAuth2 的保险,其中 Ins5 不为空
        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多