2012-12-11 69 views
1

我正在學習如何在Excel驅動的SQL查詢中使用參數(實際上我仍然在學習SQL)。感謝helped me build my query to modify the results as I need的好人,我想更進一步,並在Excel中提供一個參數來過濾結果。加入SQL/Excel查詢參數

這裏是我的查詢:

SELECT 
    fun.FUNCTION_ID 
    ,COALESCE(fun.parent_function, fun2.function_id) as PARENT_FUNCTION 
    ,fun.MODULE_ID 
    ,fun.DESCRIPTION 
    ,fun.FUNCTION_PURPOSE 
    ,fun.PB_OBJECT 
    ,sec.GROUP_ID 
    ,sec.ACCESS_LEVEL 
from 
    MODULE_FUNCTION fun 

    LEFT JOIN MODULE_FUNCTION fun2 
    ON fun.function_id = fun2.function_id 
    AND fun2.function_id IN (SELECT parent_function FROM MODULE_FUNCTION) 

    LEFT OUTER JOIN FUNCTION_SECURITY sec 
    ON fun.FUNCTION_ID = sec.FUNCTION_ID 
    AND sec.GROUP_ID = 'GROUP_NAME' 

我需要做的是讓從一隊人跑在excel表此查詢並在第二次加入「GROUP_NAME」提供的組名。不幸的是,我不能使用語法WHERE (sec.GROUP_ID = ?)found here),因爲我需要從MODULE_FUNCTION表中提取所有結果,並且只在FUNCTION_SECURITY表的右側插入結果,當提供的組匹配時(在不匹配時保留空值) 。

當我在最後嘗試使用AND (sec.GROUP_ID = ?)時,我在Excel中得到一個「無效的參數號」。從我所收集到的「?」只能與WHERE一起使用(並且可以在測試查詢中爲我找到)。

我已經嘗試了很多事情,包括聲明@parameter,但無濟於事。

我很想嘗試this technique但我想避免VB如果可能的話。

回答

4

我知道你說過你想要避免使用VB,但是對於你想要做的事情它並不是太複雜。

您可以讓工作表具有組名的單元格,然後調用宏來調整sql查詢以調整group_id。

喜歡的東西:

Dim sql As String 

sql = "select ... from ... and sec.GROUP_ID = '?'" 
sql = Replace(sql, "?", Worksheets("Analysis").Range("A1").Value) 

With ActiveWorkbook.Connections("connection name").OLEDBConnection 
    .CommandText = sql 
    .Refresh 
End With 

其中:

Worksheets("Analysis").Range("A1").Value 

是GROUP_ID。您可以將其設置爲工作簿中任何工作表中的特定單元格。我會在它旁邊創建一個名爲「刷新表」或類似的按鈕。

如果您已經創建了一個鏈接到數據庫的表,那麼在Excel中有一個連接對象。轉到數據選項卡,然後單擊「連接」。一個新的窗口會彈出。找到與SQL查詢匹配的連接。單擊該連接並單擊「屬性」,然後將連接名稱更改爲簡單(通常基於連接的服務器/表的長名稱)。使用

ActiveWorkbook.Connections("connection name") 

部分。

鏈接到創建工作表和鏈接按鈕宏:

http://office.microsoft.com/en-us/excel-help/add-a-button-and-assign-a-macro-to-it-in-a-worksheet-HP010236676.aspx

+0

難道真的那麼簡單嗎?我被VB迷住了,但這看起來很簡單。我會稍後再試,並讓你知道。 – alteredNate

+0

@alteredNate好吧,起初可能會引起混淆,但一旦進入事物擺動,它並不是那麼糟糕。我不確定你對此有多瞭解,所以如果你需要更多的幫助來實現我的答案,請告訴我。我會很樂意詳細解釋。 –

+0

嗯,我實際上知道的很少:)我正要鑽進你的代碼,以及我鏈接到的並試圖理解的代碼。如果您對我的具體案例有更詳細的瞭解,我會非常感激!在SQL查詢,數據透視表和數據庫管理之間,我目前正在學習很多東西,而VB最初並不在這個列表中!哈! – alteredNate