SQL - 在 SQL 查询上执行 SQL 查询

3

是否可以在另一个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查询。有任何建议吗?

1
可以的。只需在适当的列上进行外部查询并使用 group by。 - nawfal
如果你将查询语句放在From子句中,就可以对从select返回的列表执行查询。 - Black
4个回答

6

使用内部查询,即

SELECT *
FROM
(
    YourQueryHere
) Inn
GROUP BY YourColumnHere

3

使用派生表和去重:

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

0

尝试使用 UNION 而不是 UNION ALL

谢谢


应该是一个注释。 - Inzimam Tariq IT
请尝试以下操作: - Jahirul
请尝试以下操作: 从InsAuth2中选择Ins1作为保险, 其中Ins1不为空。 Union 从InsAuth2中选择Ins2作为保险, 其中Ins2不为空。 Union 从InsAuth2中选择Ins3作为保险, 其中Ins3不为空。 Union 从InsAuth2中选择Ins4作为保险, 其中Ins4不为空。 Union 从InsAuth2中选择Ins5作为保险, 其中Ins5不为空。 - Jahirul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接