【问题标题】:complex datatable should be created by select statement复杂的数据表应该由select语句创建
【发布时间】:2013-10-30 13:10:59
【问题描述】:

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

这是我的网格应该看起来的样子。可以看到有 MAIN 行,每个主行有 4 个子行。我需要从 select 语句中产生相同的结果

不幸的是,我的 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

我不知道如何创建子行。可以给我一杯吗?

【问题讨论】:

  • 你是如何在你的网格中循环的?我认为那更重要
  • 这是个好问题。我只想将来自 select 语句的数据表绑定到网格。不知道我说清楚了吗?
  • 你能展示你是如何在网格中循环的代码吗?你是如何绑定那个网格的?
  • gridControl.DataSource = myDatatable; //mydatatable是select语句的结果
  • 我遇到了相同类型的问题,该问题仅在一周之内就得到了回答,请搜索

标签: sql sql-server select join


【解决方案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。我认为这更符合您的要求。

【讨论】:

  • 有一个我无法修复的语法问题,它说第二个“RIGHT”关键字附近有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 2019-12-24
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多