2013-10-29 32 views
1

我需要編寫一個sql select語句,我被卡住了。我正在嘗試爲複雜的GRID編寫一個sql。網格應該用於輸入預算值。複雜的數據表應該由選擇語句創建

這是我的網格應該看起來像的方式。您可以看到有主行,每個主行有4個子行。我需要從select語句 enter image description here

產生同樣不幸的是,我的select語句產生的數據表如下

SELECT TYPE, 
    NO, 
    DESCRIPTION, 
    ISNULL((SELECT VALUE FROM RN_BUDGET_INVEST_VALUES V WHERE V.BUDGET_ID=40 AND V.FIRMA_ID=2 AND V.DEPARTMENT_ID=200 AND V.MODULE_ID=6 AND V.YEAR=2013 AND V.COLUMN_INDEX=1 AND V.ROW_INDEX=1 AND V.CREATED_USER=1),0) AS 'OCAK', 
    ISNULL((SELECT VALUE FROM RN_BUDGET_INVEST_VALUES V WHERE V.BUDGET_ID=40 AND V.FIRMA_ID=2 AND V.DEPARTMENT_ID=200 AND V.MODULE_ID=6 AND V.YEAR=2013 AND V.COLUMN_INDEX=1 AND V.ROW_INDEX=1 AND V.CREATED_USER=1),0) AS 'ŞUBAT', 
    ISNULL((SELECT VALUE FROM RN_BUDGET_INVEST_VALUES V WHERE V.BUDGET_ID=40 AND V.FIRMA_ID=2 AND V.DEPARTMENT_ID=200 AND V.MODULE_ID=6 AND V.YEAR=2013 AND V.COLUMN_INDEX=1 AND V.ROW_INDEX=1 AND V.CREATED_USER=1),0) AS 'MART', 
    ISNULL((SELECT VALUE FROM RN_BUDGET_INVEST_VALUES V WHERE V.BUDGET_ID=40 AND V.FIRMA_ID=2 AND V.DEPARTMENT_ID=200 AND V.MODULE_ID=6 AND V.YEAR=2013 AND V.COLUMN_INDEX=1 AND V.ROW_INDEX=1 AND V.CREATED_USER=1),0) AS 'NİSAN', 
    ISNULL((SELECT VALUE FROM RN_BUDGET_INVEST_VALUES V WHERE V.BUDGET_ID=40 AND V.FIRMA_ID=2 AND V.DEPARTMENT_ID=200 AND V.MODULE_ID=6 AND V.YEAR=2013 AND V.COLUMN_INDEX=1 AND V.ROW_INDEX=1 AND V.CREATED_USER=1),0) AS 'MAYIS', 
FROM RN_BUDGET_INVESTMENT_VARIABLES VARS 

enter image description here

我不知道如何創建的子行。你能給我一個iade嗎?

+1

你是如何在網格中循環的?我認爲這更重要 – DevelopmentIsMyPassion

+0

這是一個很好的問題。我只想將來自select語句的數據表綁定到網格。我不確定我是否明確告訴你? –

+0

你可以展示如何通過網格循環代碼?你如何約束網格? – DevelopmentIsMyPassion

回答

1

你想做一個RIGHT OUTER JOIN讓它看起來有點類似。 您還必須加入表之間的外鍵關係,如BudgetNr或FIRMA_ID或CREATED_USER或表之間的某些關係。 此外,您的WHERE語句都返回相同的數據,所以你需要改變他們作爲都具有相同的BUDGET_ID,FIRMA_ID,DEPARTMENT_ID,MODULE_ID,YEAR,Column_Index中,ROW_INDEX,CREATED_USER

 SELECT TYPE, 
     NO, 
     DESCRIPTION, 
     ISNULL(V1.VALUE,0) AS 'OCAK', 
     ISNULL(V2.VALUE,0) AS 'ŞUBAT', 
     ISNULL(V3.VALUE,0) AS 'MART', 
     ISNULL(V4.VALUE,0) AS 'NİSAN', 
     ISNULL(V5.VALUE,0) AS 'MAYIS', 

    FROM RN_BUDGET_INVESTMENT_VARIABLES VARS 
    RIGHT OUTER JOIN RN_BUDGET_INVEST_VALUES V1 ON V.[LinkKeyto RN_BUDGET_INVESTMENT_VARIABLES table] = [LinkedKey in this table] WHERE V1.BUDGET_ID=40 AND V1.FIRMA_ID=2 AND V1.DEPARTMENT_ID=200 AND V1.MODULE_ID=6 AND V1.YEAR=2013 AND V1.COLUMN_INDEX=1 AND V1.ROW_INDEX=1 AND V1.CREATED_USER=1 
    RIGHT OUTER JOIN RN_BUDGET_INVEST_VALUES V2 ON V.[LinkKeyto RN_BUDGET_INVESTMENT_VARIABLES table] = [LinkedKey in this table] WHERE V2.BUDGET_ID=40 AND V2.FIRMA_ID=2 AND V2.DEPARTMENT_ID=200 AND V2.MODULE_ID=6 AND V2.YEAR=2013 AND V2.COLUMN_INDEX=1 AND V2.ROW_INDEX=1 AND V2.CREATED_USER=1 
    RIGHT OUTER JOIN RN_BUDGET_INVEST_VALUES V3 ON V.[LinkKeyto RN_BUDGET_INVESTMENT_VARIABLES table] = [LinkedKey in this table] WHERE V3.BUDGET_ID=40 AND V3.FIRMA_ID=2 AND V3.DEPARTMENT_ID=200 AND V3.MODULE_ID=6 AND V3.YEAR=2013 AND V3.COLUMN_INDEX=1 AND V3.ROW_INDEX=1 AND V3.CREATED_USER=1 
    RIGHT OUTER JOIN RN_BUDGET_INVEST_VALUES V4 ON V.[LinkKeyto RN_BUDGET_INVESTMENT_VARIABLES table] = [LinkedKey in this table] WHERE V4.BUDGET_ID=40 AND V4.FIRMA_ID=2 AND V4.DEPARTMENT_ID=200 AND V4.MODULE_ID=6 AND V4.YEAR=2013 AND V4.COLUMN_INDEX=1 AND V4.ROW_INDEX=1 AND V4.CREATED_USER=1 
    RIGHT OUTER JOIN RN_BUDGET_INVEST_VALUES V5 ON V.[LinkKeyto RN_BUDGET_INVESTMENT_VARIABLES table] = [LinkedKey in this table] WHERE V5.BUDGET_ID=40 AND V5.FIRMA_ID=2 AND V5.DEPARTMENT_ID=200 AND V5.MODULE_ID=6 AND V5.YEAR=2013 AND V5.COLUMN_INDEX=1 AND V5.ROW_INDEX=1 AND V5.CREATED_USER=1 

你可能還喜歡看在PIVOT。我認爲這更符合你的需求。

+0

有一個我無法修復的語法問題,它說第二個「RIGHT」關鍵字附近有問題 –