Если у вас есть все совпадающие строки, то inner join
хорошо. Я бы не стал рекомендовать full outer join
, если вам небезразличны несоответствия. Вместо этого union all
предлагает подход:
select code1,
sum(month1) / nullif(sum(month1_2), 0) as ratio_1,
sum(month2) / nullif(sum(month2_2), 0) as ratio_1,
sum(month3) / nullif(sum(month3_2), 0) as ratio_1,
from ((select t1.code1, month1, month2, month3
from t1
) union all
(select t2.code1, null, null, null, t2.month1 as month1_2, t2.month2 as month2_2, t2.month3 as month3_2
from t2
)
) t
group by code1;
Вы могли проверить значения с модульным тестом. Один из моих коллег должен был сделать что-то подобное этому в проекте, где мы должны были удостовериться, что всем классам в определенном пространстве имен относились к определенным атрибутам их.
Выполните модульные тесты со своей сборкой (Вы делаете это так или иначе право? :) или как часть сборки интеграции. Это сохранит Ваш исходный инструмент для очистки, а также Вы не должны будете представлять код, который делает утверждения.
Я полагаю, что добавил бы класс Настроек и сохранил бы их там вместо того, чтобы создать новый тип. Класс Настроек может быть поддержан файлом конфигурации приложения, который сделает их легче измениться через изменения конфигурационного файла в случае необходимости. Если Вы не укажете их в конфигурационном файле, тем не менее, то он будет использовать значения, которые Вы устанавливаете как значения по умолчанию.
Я также пошел бы путем модульного теста. Необходимо будет использовать атрибут InternalsVisibleTo в файле Assembly.cs, так как я не думаю, что Настройки могут использоваться вне проекта, если Вы не делаете.
Вы действительно хотите эти ключи hardcoded в Ваше приложение? Разве не было бы лучше иметь их в файле конфигурации? Затем, если существует какая-либо проблемная компиляция сообщения, это - просто проблема конфигурации во время выполнения.
AdamRalph имеет точку, но встречная точка также работает, если Вы разберетесь в нем во время компиляции, то у Вас никогда не будет проблем конфигурации во время выполнения (предполагающий, что правильные значения не могут измениться),
Вне этого способности времени компиляции C# являются абсолютным Спамом. Их почти ничего, который может быть сделан во время компиляции. Наилучшее имеющееся я известный о являюсь шаблоном where
пункт. Если бы я должен был предположить, то я сказал бы, что это - намеренное проектное решение Anders Hejlsberg, поскольку это, кажется, соответствует остальной части языка
Точка Andrew Hare о unittests + отражение почти так же хорошо, как я ожидал бы. co мой рабочий использует это для тестирования того любого класса, который мог использоваться в, особые случаи правильно реализовали некоторый протокол.
Если ключи называют согласно тем же правилам как идентификаторы C# или возможно еще больше ограничения, и известны и конечны, Вы могли использовать перечисление:
public enum ResourceKeys
{
ABC123,
DEF456
}