2012-07-25 65 views
2

是否可以在另一个SQL查询上运行SQL查询? 我有一个SQL查询,使用Union All子句将许多列编译成一个列。我需要使用小组条款,但你会发现这是不可能的。有没有办法在这个上运行另一个SQL查询?SQL - 在SQL查询上执行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 

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

+1

是的,你可以。只需在适当的列上执行一个外部查询与群组 – nawfal 2012-07-25 14:54:49

回答

5

使用的内部查询即

SELECT * 
FROM 
(
    YourQueryHere 
) Inn 
GROUP BY YourColumnHere 
+0

非常感谢你! – eatonphil 2012-07-25 15:01:49

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 
+0

非常感谢你! – eatonphil 2012-07-25 15:00:52

+0

@phileaton不客气:-) – 2012-07-25 15:01:31

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

+1,这是如此真实和简单。 – 2012-07-25 15:02:31

0

尝试使用UNION而不是UNION ALL

谢谢

+0

应该是一个评论。 – 2016-08-10 09:14:37

+0

尝试以下操作: – Jahirul 2016-08-30 08:48:35

+0

尝试以下操作:选择INS1保险从InsAuth2 WHERE INS1 IS NOT NULL 联盟 选择INS2保险从InsAuth2 WHERE INS2 IS NOT NULL 联盟 选择INS3保险从InsAuth2 WHERE INS3 IS NOT NULL Union 从InsAuth2中选择Ins4作为保险WHERE Ins4 IS NOT NULL Union 从InsAuth2中选择Ins5作为保险WHERE Ins5 IS NOT NULL – Jahirul 2016-08-30 08:49:10