0

给定一个输入数据表,我希望有一组描述同一记录的兄弟列的“标志列”

  • 我正在使用 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_FLAGvalue_y_FLAG评估兄弟列是否value_x为.value_yNULL

我知道有类似ISNULL(), 或的函数COALESCE(),但我不认为是这种情况,因为我正在尝试根据另一列的值更新一列

我知道我可以使用IF / ELSE语句,但是将许多布尔标志 (2^n) 的所有情况设置为在标志变量的同一个“更新”语句中一起工作是非常复杂的。

如何处理?

设置完所有标志后,我想以某种方式总结我的表格。例如,我想COUNT在所有标志变量上都有一个,然后我想有一个COUNT给定的“颜色类别”。

可能我不需要一组支持标志变量,但我想让它们使表格更具可读性,并使 SQL 代码更具可读性。谢谢!

4

1 回答 1

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

希望它有效!

编辑:关于计数,您可以在每次需要时使用 group by 子句,而不是在某处保存标志

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

这将返回一个 2 列的表,其中颜色和 int 另一列是具有标志 = 1 的行数

于 2012-06-07T13:00:55.467 回答