2013-10-23 83 views
0

我卡具有以下問題:訪問/ SQL:多條件對同一列

我有一個名爲「Pickauf_0110」與桌〜80列〜60000分的記錄。

我感興趣的兩列是:「nr_pickl」和「platz_von」。

在列中的條目「nr_pickl」是這樣的:

123456 
123456 
123457 

的條目列「platz_von」是這樣的:這些列

03-01-00-00 
03-02-00-00 
04-01-00-00 
05-06-03-02 

都不是關鍵,所以記錄不是唯一的。

這是我想找出什麼:

多少條目「platz_von」開始與「03」,多少有「04」,多少與「05」爲「nr_pickl」每一個唯一的入口。

我的想法是做三重selfjoin,有三種不同的條件(platz_von如'03 *'...),總結這些並最終將它們按nr_pickl分組。

這裏是我的SQL查詢失敗,出現錯誤:

SELECT 
     p1.nr_pickl, 
     sum(p1.platz_von) as Gang_03, 
     sum(p2.platz_von) as Gang_04, 
     sum(p3.platz_von) as Gang_05 
    FROM 
     ((Pickauf_0110 as p1 
    INNER JOIN 
     Pickauf_0110 as p2 ON p1.nr_pickl = p2.nr_pickl) 
    INNER JOIN 
     Pickauf_0110 as p3 ON p1.nr_pickl = p3.nr_pickl) 
    WHERE 
     p1.platz_von like '03*' AND 
     p2.platz_von like '04*' AND 
     p3.platz_von like '05*' 
    GROUP BY 
     p1.nr_pickl 

我知道我的查詢不能正常工作,但我不知道在哪裏我的錯誤是,如果我的做法是正確的。任何幫助表示讚賞!

+0

有一點需要指出的是,在你喜歡的部分,你應該使用%而不是*。 A *將搜索字符串'03 *',而使用%將匹配'03','03-01-00-00','03akjdbdajc'等。 – crazyloonybin

+0

此外,請嘗試使用'count'來代替所有你的'總和' – crazyloonybin

+0

它是使用非標準LIKE的訪問SQL,比如*。 – Kickstart

回答

1
SELECT 
    p1.nr_pickl, 
    sum(IIF(LEFT(p1.platz_von, 2) = "03", 1, 0) as Gang_03, 
    sum(IIF(LEFT(p1.platz_von, 2) = "04", 1, 0) as Gang_04, 
    sum(IIF(LEFT(p1.platz_von, 2) = "05", 1, 0) as Gang_05 
FROM 
    Pickauf_0110 as p1 
GROUP BY p1.nr_pickl 

編輯:我沒有試過這個語法。但是這應該在MS-Access中工作。

+0

這很完美 - 謝謝! – user2910459

+0

你可以轉換此代碼爲SQL Server 2008 R2? –

+0

@RameshRajendran:'SELECT p1.nr_pickl, sum(left left(p1.platz_von,2)='03'then 1 else 0 end)as Gang_03, sum(left left(p1.platz_von,2) ='04'then 1 else 0 end)as Gang_04, sum(case left when(p1.platz_von,2)='05'then 1 else 0 end)as Gang_05 FROM Pickauf_0110 as p1 GROUP BY p1.nr_pickl ' – shahkalpesh