Я понятия не имею, имеет ли смысл смысл заголовка, или если это относится к sql или tsql, поскольку я относительно новичок в sql и пришел из фон vba, но ниже - половина из того, что у меня есть (я внёс в это исправление, но в SQL-пакете BI-пакета был создан базовый select/from/where .. и он, по-видимому, использует, а не как join). Если это помогает в понимании, я использую его для заполнения куба olap. Также есть 1 значение, которое читается, и требуется также много связанного поля.Как «hardcode» значение поля select, когда нет соединения с другой таблицей
Мне удалось немного узнать отсюда (следовательно, почему я думаю, что это может быть 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, который «соединен» с таблицей acct_detail с помощью prj_code и phase_code. Проблема в том, что для некоторых acct_code нет prj_code или Phase_code..they являются нулевыми..так также не может быть никакой ссылки на таблицу prj_phase и поэтому нет mkt_segment. В этой ситуации я хочу использовать значение hardcoded/default вместо значения mkt_segment (которое не может быть получено). Я попытался использовать случай, когда для mkt_segment в инструкции select, но это не сработало.
Я могу сделать это в отдельном запросе (исключая таблицу prj_phase и hardcoding значение в инструкции 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
Любая помощь/предложения относительно того, что посмотреть, будут очень признательны!
[Плохие привычки пинать: использование старинного стиля JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был отменен с помощью ANSI - ** 92 ** SQL Standard (более ** 20 лет ** назад) –
Попробуйте внешнее соединение, оно будет использовать значение «null» в качестве значения по умолчанию. – ewernli
Интересно знать Марк, но, как я уже говорил, базовый код генерируется пакетом BI посредством перетаскивания таблиц/полей/объединений ... так что это не привычка – Brendanjb