2013-02-15 105 views
2

我有一個叫做列表的表格,我必須提取以下內容。 字段名和日期多個選擇在一張桌子上

  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?

回答

0

嘗試

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 
0

您正在尋找這樣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 

有更具成本效益的方法來獲得期望的結果,但是這是最容易理解的。

2
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

0

試試這個:

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 
相關問題