2017-07-03 76 views
0

鉴于下表,我希望能够运行一个查询,该查询将返回两列:一列用于哺乳动物,另一列用于其他所有列。根据同一表的不同条件返回列

id class 
--------- 
1 reptile 
2 bird 
3 mammal 
4 mammal 
5 mammal 

预期输出:

mammal others 
-------------- 
3  1 
4  2 
5  

我曾尝试以下(除其他奇怪的事情),但得到的MS Access中的“不能从子句重复的表名......在”错误:

SELECT a AS mammals, b AS others 
FROM 
(SELECT id AS a FROM animals WHERE class = "mammal"), 
(SELECT id AS b FROM animals WHERE class <> "mammal"); 

在SQL这可能吗?谢谢!

+1

你的预期输出是非关系的。你能解释一下你达到预期产出的逻辑吗?这是我可能在表示层处理的事情。 –

+0

这个想法是,我希望能够在两个不同的集合上执行不同的进一步查询,具体取决于它们是否属于目标组。如果我使两个WHERE条件单独查询,我肯定可以做到这一点,但我希望有一种方法可以在一个查询中返回两个组。 – Windmill

+1

访问不支持行号,这可能会使此查询头痛。不过,给我们输出的逻辑。 –

回答

3

你需要生成unique号码都查询class='mammal'class<>'mammal'然后使用唯一编号加入两个查询。由于在class='mammal'class<>'mammal'记录的数量可能会有所不同,我们需要使用FULL OUTER JOIN

,但是这将是一个痛苦这样做在Ms-Access不支持Row_NumberFull Outer Join

SELECT * 
FROM (SELECT a.id, 
       a.class, 
       Count(*) AS Rn 
     FROM animals a 
       INNER JOIN animals b 
         ON a.id >= b.id 
     WHERE b.class = 'mammal' 
     GROUP BY a.id, 
        a.class) a 
     LEFT JOIN (SELECT a.id, 
         a.class, 
         Count(*) AS Rn 
        FROM animals a 
         INNER JOIN animals b 
           ON a.id >= b.id 
        WHERE a.class <> 'mammal' 
        GROUP BY a.id, 
          a.class) b 
       ON a.rn = b.rn 
UNION ALL 
SELECT * 
FROM (SELECT a.id, 
       a.class, 
       Count(*) AS Rn 
     FROM animals a 
       INNER JOIN animals b 
         ON a.id >= b.id 
     WHERE b.class = 'mammal' 
     GROUP BY a.id, 
        a.class) a 
     RIGHT JOIN (SELECT a.id, 
          a.class, 
          Count(*) AS Rn 
        FROM animals a 
          INNER JOIN animals b 
            ON a.id >= b.id 
        WHERE a.class <> 'mammal' 
        GROUP BY a.id, 
          a.class) b 
       ON a.rn = b.rn 
WHERE a.rn IS NULL 

注意:我不太确定Ms-Access的语法可能是我们需要围绕连接的泛式分析,但是这应该会给你一个启动的想法

+3

我不能相信你真的这样做+1 –

+0

@TimBiegeleisen - 谢谢;) –

+0

@TimBiegeleisen:哈,Prdp需要一种生活! +1。 – Gustav

0

尝试这可能有助于

select id as Mammal , null as Others from table where class='mammal' 
union 
select null as Mammal , id as Others from table where class<>'mammal' 
+2

这并没有给出预期的结果。 –

相关问题