给定一个输入数据表,我希望有一组描述同一记录的兄弟列的“标志列”。
- 我正在使用 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
)
然后我有以下玩具数据(由于“旧”2005 SQL 版本,我需要为每条记录重复 INSERT/VALUES 语句):
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 代码更具可读性。谢谢!