2012-04-11 72 views
1

我在學校工作。我不是很舒服的使用SQL,我試圖去掌握它......將行數據轉換爲列Access 07不使用PIVOT

我的主管給了我一個任務,我需要獲取行數據和列。我們使用交叉表嚮導並自動創建SQL來獲得我們需要的。

基本上,我們有這樣一個表:

ReqNumber  Year  FilledFlag(is a checkbox)  FilledBy 

    1   2012    (notchecked)   ITSchoolBoy 
    1   2012    (checked)    GradStudent 
    1   2012    (notchecked)   HighSchooler 
    2  etc, etc. 

什麼用戶想是有和檢查什麼都REQ號碼的清單

我們的自動旋轉代碼給我們所有FilledBy選項(總共有9個)作爲列標題,並將其全部按reqnumber進行分組。

如何在沒有支點的情況下做到這一點?我想圍繞這個來解決我的問題。最近我可以找到類似於:

SELECT 
    SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy, 
    SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, etc. 
FROM myTable 

任何人都可以幫我解釋一下嗎?指向我的指導方向?我一直在尋找一天中最好的一段時間,儘管我是一名學生,但我不認爲這會被拖得太久。但我真的很想知道!

+0

這不是我會避免使用數據透視表,只是因爲我對這門語言很陌生,所以我想學習如何以另一種方式做到這一點。我的老闆告訴我他會以一種不同的方式做到這一點(如上所述),因爲他更喜歡'純粹的SQL'。我想我只想知道增加我的知識是全部的(抱歉,糟糕的英語)。 – mrwienerdog 2012-04-11 14:51:54

+0

你們 - 如此敏銳(和聰明!)。我們沒有使用年份欄,它是一張用於追蹤學生就業情況的表格,所以假定它是在當年(儘管訂單可能是在上一個日曆年進行的)。 – mrwienerdog 2012-04-11 15:07:46

回答

1

我想你的老闆的建議可以工作,如果你的GROUP BY ReqNumber。

SELECT 
    ReqNumber, 
    SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy, 
    SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, 
    etc. 
FROM myTable 
GROUP BY ReqNumber; 

不同的方法是加入多個子查詢。這個例子引入了你的兩個類別。如果你需要把它擴展到9個類別,你會有很多加入進行。

SELECT 
    itsb.ReqNumber, 
    itsb.ITSchoolboy, 
    grad.GradStudent 
FROM 
    (
     SELECT 
      ReqNumber, 
      FilledFlag AS ITSchoolboy 
     FROM myTable 
     WHERE FilledBy = "ITSchoolboy" 
    ) AS itsb 
    INNER JOIN 
    (
     SELECT 
      ReqNumber, 
      FilledFlag AS GradStudent 
     FROM myTable 
     WHERE FilledBy = "GradStudent" 
    ) AS grad 
    ON itsb.ReqNumber = grad.ReqNumber 

請注意,我不建議你應該使用這種方法。然而,既然你問了關於你的方法(可行)的替代方案......這是一個。敬請期待其他人提供更簡單的選擇。 :-)

+0

非常感謝,我只是想了解這些東西是如何工作的(一般來說)。我會按照你的意見,並保持一個手錶。我同意,這將是一個可怕的很多加入.... – mrwienerdog 2012-04-11 15:38:54

+0

做一個相當有說服力的情況下存在的樞紐。 :-)樞軸可以使一些挑戰更容易處理,特別是如果您可以使用該向導來指導您。 – HansUp 2012-04-11 15:42:05

+1

我主要問的是,如果我遇到了PIVOT不可用的情況(或特別是嚮導 - 雖然它們顯然非常方便,但使用其中之一學習不多)。 – mrwienerdog 2012-04-11 15:47:17