复杂数据表应该由select语句创建

时间:2013-10-29 12:47:16

标签: sql sql-server select join

我需要写一个sql select语句而且我被卡住了。我正在尝试为复杂的GRID编写一个sql。网格应该用于输入预算值。

这是我的网格应该是这样的样子。你可以看到有MAIN行,每个主行有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 个答案:

答案 0 :(得分: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。我认为这更符合您的需求。