我不知道标题是否有意义,或者这是否与 sql 或 tsql 有关,因为我对 sql 相对较新并且来自 vba 背景,但以下是我所拥有的一半(我修改了它,但是 BI 包sql reader创建了基本的select/from/where's ..它似乎使用where而不是join)。如果它有助于理解,我用它来填充一个 olap 多维数据集。所以有 1 个值被读取,并且还需要大量相关字段。
我已经设法从这里学到了一些东西(因此我认为它可能是 tsql),但我坚持这个。
我得到的值 *dbo.gl_acct_detail.db_amt_cc - dbo.gl_acct_detail.cr_amt_cc* 这与一个月(表格 accouting_period)、org_code、acc_code 和 mkt_segment 相关联
mkt_segment 来自 prj_phase 表,该表通过 prj_code 和 phase_code “加入”到 acct_detail 表。问题是对于某些 acct_code 没有 prj_code 或 Phase_code..它们是空的..所以不能链接到 prj_phase 表,所以没有 mkt_segment。在这种情况下,我想使用硬编码/默认值代替 mkt_segment 值(无法获得)。我尝试在 select 语句中为 mkt_segment 使用 Case When,但这不起作用。
我可以在单独的查询中执行此操作(通过排除 prj_phase 表,并在 select 语句中对值进行硬编码并将 dbo.acct_code.phase_code 为 null 的位置)..但我想知道如何在其中执行此操作询问。
SELECT
CASE WHEN substring(cast(dbo.gl_acct_detail.accounting_period as CHAR), 5, 2) < '07'
THEN Left(dbo.gl_acct_detail.accounting_period, 6) - 94
ELSE Left(dbo.gl_acct_detail.accounting_period, 6) - 6
end,
dbo.gl_acct_detail.org_code,
dbo.gl_acct_detail.acct_code,
dbo.prj_phase.mkt_segment,
CASE WHEN (dbo.gl_acct_detail.fiscal_per_nbr <> '12' and dbo.gl_acct_detail.acct_code = '70199')
THEN '0'
ELSE dbo.gl_acct_detail.db_amt_cc - dbo.gl_acct_detail.cr_amt_cc
end
FROM
dbo.gl_acct_detail, dbo.sys_defaults, dbo.prj_phase
WHERE
dbo.gl_acct_detail.fiscal_year = dbo.sys_defaults.current_fiscal_year -1
AND dbo.gl_acct_detail.phase_code = dbo.prj_phase.phase_code
AND dbo.gl_acct_detail.prj_code = dbo.prj_phase.prj_code
任何有关调查内容的帮助/建议将不胜感激!