2013-10-29 31 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”关键字附近有问题 –