У меня есть таблица настроек, построенная из категории, определяющей различные продукты, varname - это имя переменной, а info - значение параметра.
так, например,
select top 6 category, varname, info
from settings_table
where NODE_NAME='HTT-COMM-A'
and section='Module Settings'
and category in ('ProductA', 'ProductB')
order by varname
Результат:
category varname info
ProductB WEB_ACCESS_ALLOW NO
ProductA WEB_ACCESS_ALLOW NO
ProductB WEB_ACCESS_BLOCK YES
ProductA WEB_ACCESS_BLOCK YES
ProductB WEB_ACCOUNT_DETAIL NO
ProductA WEB_ACCOUNT_DETAIL YES
Я хотел бы создать простой список различий между значениями, когда category = 'ProductA' и 'ProductB'. Я могу придумать несколько способов сделать это с помощью временной таблицы или нескольких подвыборов (например, этой болезненной):
select a.category, a.varname, a.info , b.category, b.info
from (select category, varname, info, description
from settings_table
where category = 'ProductA') as a,
(select category, varname,info, description
from settings_table
where category = 'ProductB') as b
where a.varname=b.varname and a.info != b.info
, но вышеприведенный метод (по крайней мере) завершается ошибкой, когда в b есть имя, которого нет в a. (Любые решения должны решить эту проблему, любые различия в именах переменных между a и b также должны быть представлены.)
Это не сложная проблема, которую трудно решить хитроумно, но мне интересно, есть ли «правильный» способ сделать это элегантно, без ужасных подвыборов или без оговорок выше.
Это более независимый от SQL, но эта конкретная таблица находится на сервере MSSQL.
Спасибо,
Rk