2015-12-22 51 views
1

我有一個包含以下內容的平表:導出內容

Categorie | Series | Productdetails 
    A   A.001 1 
    A   A.001 2 
    A   A.001 3 
    A   A.002 1 
    A   A.002 2 
    B   A.002 1  
    C   A.003 1 
    C   A.006 2 
    C   A.008 3 

因此,我們必須具有多個系列具有多個產品類別。 產品細節包括277列....真的:(

我想將這些數據導出爲ex​​cel,但我被要求提供一個excel文件,每個系列的工作表包含該系列的所有產品的工作表

在上述例子中,這將導致3個Excel文件:。A.xlsx,B.xlsx和C.xlsx

  • 文件A.xlsx將包含2個工作表(001和002)
  • 001將包含3條記錄,002將包含2條記錄
  • 文件B.xlsx將包含1工作表(002)。
  • 002將包含1條記錄。
  • 文件C.xlsx將包含3個工作表(003,006和008)。
  • 每個將包含1條記錄。

解決此問題的最佳方法是什麼?總共約12個類別包含約200個系列,其中包含最小1和最大14.000個產品。

格爾茨Henrov

+0

您有哪些編碼經驗?你想在哪裏解決這個問題(在Excel中,使用VBA)? – Shnugo

+0

我相當精通SSIS,TSQL。我更喜歡在SSIS中執行此操作,TSQL中的解決方案不會超過。我可以閱讀大多數編程語言,因此SSIS中的一些編程可以。 – Henrov

回答

1

你叫我把我的意見變成一個答案......

安裝Excel,並告訴Excel來從外部來源導入數據。助理將帶領您創建ODC連接。這非常簡單。作爲一個結果,你會發現你要用來打開連接的連接字符串。

這個討論給你some VBA

在VBA中首先,您可以撥打SELECT來獲取DISTINCT表單名稱。把它們放在一個數組中。

比你遍歷這個數組並且總是使用相同的SELECTWHERE SheetName='YourSheetName'來檢索你只需要一個特殊文件的數據。

比你使用Set wb=Workbooks.Add()創建一個新的工作簿與實際的文件名(首先聲明變量!)以獲得參考。

使用Set ws=wb.Worksheets.Add()根據DISTINCT工作表名稱列表創建工作表。然後填寫表格並保存。如果您需要更多的幫助,只需撥打..

的代碼應該大致是這樣的:

Dim wb As Workbook 
Dim ws As Worksheet 

'Open connection and fill a Recordset with the distinct filenames 

'Do this in a loop for all distinct file names 
Set wb = Workbooks.Add() 
wb.Name = "YourNameFromDistinctList" 

    'Fill another Recordset with the distinct sheet names for each workbook 

    'Do this in a loop for all distinct file names for each workbook 
    Set ws = wb.Worksheets.Add() 
    ws.Name = "YourSheetName" 

    'Fill Sheet with data 
    'either use ws.ListObjects 
    'or traverse through ws.Cells 

    Set ws = Nothing 

wb.SaveAs "YourNameFromDistinctList" 
Set wb = Nothing 
1

有了這個查詢,你會與文件名和工作表的名稱(如軟墊3位數字)一起得到您的平臺。

SELECT tbl.Categorie + '.xlsx' AS ExcelFile 
     ,REPLACE(STR(DENSE_RANK() OVER(PARTITION BY tbl.Categorie ORDER BY tbl.Categorie,tbl.Series),3),' ','0') AS ExcelSheetPadded 
     ,tbl.* 
FROM @tbl AS tbl 

查詢這樣給你所需要的計數:

SELECT tbl.Categorie + '.xlsx' AS ExcelFile 
     ,COUNT(*) AS CountPerSheet 
FROM @tbl AS tbl 
GROUP BY tbl.Categorie,tbl.Series 

隨着DISTINCT等它應該很容易得到你需要的所有信息。

你需要任何幫助嗎?

+0

那麼,這部分並不那麼難:)我正在尋找一種方法,如何將它變成excel。 – Henrov

+0

@Henrov好吧,我不清楚你卡在哪裏。我會在Excel中使用VBA。如果這對你有可能,我可以稍後爲你準備一些代碼。 – Shnugo

+0

但是,這樣做會很好,但是在執行該工作的計算機上沒有安裝Excel(但)。只需AccessDatapack。但我會盡力在那臺機器上取得勝利。我花了數年時間在Access中創建了一些東西('97 - 2000),所以再次使用VBA會很有趣!你能給我發一些代碼嗎?那太好了。 – Henrov