多个选择在一张桌子上

多个选择在一张桌子上

问题描述:

我有一个叫做列表的表格,我必须提取以下内容。 字段名和日期多个选择在一张桌子上

  1. 如果日期< 20120401然后在ID统计>>>>给出结果
  2. 如果日期> 20120401然后在ID统计>>>>给出结果

如果有20个项目日期< 20120401和其身份识别XYZ

那么结果应该是日期> 20120401的30个项目......

XYZ 20 30

我做喜欢...

select 
(select count(id) from list where id='xyz' and date<20120401) as date1, 
(select count(id) from list where id='xyz' and date>20120401) as date2; 

结果为20 30

但如何打印的IDNumber?

尝试

select id, count(id) from list where id='xyz' and date < 20120401 
union 
select id, count(id) from list where id='xyz' and date > 20120401 

您正在寻找这样GROUP BY条款,也许事情:

SELECT 
    l2.id, 
    (SELECT COUNT(id) 
    FROM list l1 
    WHERE l1.id = l2.id AND date < 20120401) AS date1, 
    (SELECT COUNT(id) 
    FROM list l1 
    WHERE l1.id = l2.id AND date > 20120401) AS date2 
FROM 
    list l2 
GROUP BY 
    l2.id 

有更具成本效益的方法来获得期望的结果,但是这是最容易理解的。

SELECT 
id, 
SUM(CASE WHEN date < 20120401 THEN 1 ELSE 0 END) AS date1, 
SUM(CASE WHEN date > 20120401 THEN 1 ELSE 0 END) AS date2, 
FROM list 
WHERE id = 'xyz' 
GROUP BY id 

UPDATE:

SELECT 
list.id, 
idmaster.idlocation, 
SUM(CASE WHEN list.date < 20120401 THEN 1 ELSE 0 END) AS date1, 
SUM(CASE WHEN list.date > 20120401 THEN 1 ELSE 0 END) AS date2, 
FROM list 
INNER JOIN idmaster ON list.id = idmaster.idnumber 
WHERE list.id = 'xyz' 
GROUP BY id 
+0

谢谢你,它的工作......多一个查询在相同的......如果我有一个更表命名idmaster我必须从列表中选择一个idlocation的id号的记录....如何改变查询。我的意思是说....从idmaster选择id idlocation ='abc'(上面给出的查询)? – var 2013-02-15 16:49:45

+0

对不起,我不明白这个问题。这些表连接在一起吗? – fancyPants 2013-02-15 16:51:53

+0

再一次,我不知道,你在追求什么。根据上面的查询结果,你需要来自表idmaster的信息?表格如何连接?最好你发布另一个问题,显示你期望的表格和输出结果。如果我的答案在这里帮助了你,请点击我答案左边的绿色支票,接受我的答案。 – fancyPants 2013-02-15 16:57:35

试试这个:

SELECT 
    id, 
    SUM(CASE WHEN date < 20120401 
    THEN 1 ELSE 0 END) AS date1, 
    SUM(CASE WHEN date > 20120401 
    THEN 1 ELSE 0 END) AS date2, 
    FROM list 
    WHERE id = 'xyz' 
    GROUP BY id