2012-06-07 6 views
0

Учитывая таблицу входных данных, я хотел бы иметь набор o «столбцы флагов», которые описывают столбцы одного и того же журнала.Обновите многие столбцы флагов, учитывая значение других столбцов (значения NULL) в той же записи

  • Я использую Microsoft SQL Server 2005.
  • Прежде всего, мне нужно загрузить данные в целевую таблицу, тогда мне нужно выполнить проверки, чтобы поместить значения в эти столбцы флагов.

Скажем, например, у меня есть игрушечный столик, как следующий:

CREATE TABLE zzz_test 
      (
          color  VARCHAR(10), 
          value_x  INTEGER , 
          value_y  INTEGER , 
          value_x_FLAG bit  , 
          value_y_FLAG bit 
      ) 

Тогда у меня есть следующие игрушечные данные (мне нужно повторить INSERT/VALUES заявления для каждой записи из-за " старый»2005 SQL версии):

INSERT zzz_test(color,value_x,value_y) 
VALUES('red',1,NULL) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('green',NULL,NULL) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('red',NULL,2) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('red',1,3) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('black',NULL,1) 
INSERT zzz_test(color,value_x,value_y) 
VALUES(NULL,3,2) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('black',1,2) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('red',3,4) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('green',1,1) 
INSERT zzz_test(color,value_x,value_y) 
VALUES('blue',5,NULL) 

Теперь я хотел бы иметь быстрый способ положить значения внутри value_x_FLAG и value_y_FLAG оценки, если двойники столбцов value_x и value_y являются NULL.

Я знаю, что есть функции, как ISNULL() или COALESCE(), но я не думаю, что это так, потому что я пытаюсь обновить столбец заданного значения другого столбца.

Я знаю, что могу использовать операторы IF/ELSE, но довольно сложно установить все случаи, когда много логических флагов (2^n) работают вместе в одном и том же «обновлении» оператора переменных флага.

Как с этим бороться?

После установки всех флагов я хотел бы каким-то образом обобщить таблицу. Например, я хотел бы иметь COUNT для всех переменных флага, тогда я хотел бы иметь COUNT с учетом «цветовой категории».

Возможно, мне не нужен набор флагов поддержки, но я хотел бы, чтобы они сделали таблицу более читаемой, а также более понятной для SQL-кода. Спасибо!

ответ

2

попробовать это, после всех вставок, сделать

update zzz_test set value_x_FLAG = CASE value_x when null then 1 else 0 END, value_y_FLAG = CASE value_y when null then 1 else 0 END 

надеюсь, что это работает!

редактировать: о счете, вы можете использовать группу по п каждый раз вам это нужно, вместо того, чтобы иметь флаг, сохраненный в где-то

select Color, Count(value_x_FLAG) from zzz_test group by Color having value_x_FLAG != 0 

это будет возвращать таблицу 2 столбца, с цветом и ИНТ другой столбец число строк, которые имеют флаг = 1

+0

Я только что попробовал его, но он устанавливает все флаги в 0. Я думаю, что должен быть какой-то трюк, чтобы добавить к 'when null', чтобы система попала в в этом случае любая идея? – TPPZ

+0

попробуйте '..CASE value_x, когда IS NULL ..' –

+0

Я также пробовал оператор' GROUP BY', но он дает мне ошибки, говорящие, что столбец в предложении 'HAVING' не содержится ни в агрегатной функции, ни в предложении GROUP BY. – TPPZ