我需要写一个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
我不知道如何创建子行。你能给我一个iade吗?
答案 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。我认为这更符合您的需求。