1、Transact-SQL Cookbook 第一章 数据透视表 1.1 使用数据透视表 1.1.1 问题 支持一个元素序列往往需要解决各种问题。例如,给定一个日期范围,你可能希望产生一行在每个日期的范围。或者,您可能希望将一系列的返回值在单独的行成一系列单独的列值相同的行。实现这种功能,你可以使用一个永久表中存储一系列的顺序号码。这种表是称为一个数据透视表。 许多食谱书中使用数据透视表,然后,在所有情况下,表的名称是。这个食谱告诉你如何创建表。 1.1.2 解决方案 首先,创建数据透视表。下一步,创建一个表名为富,将帮助你在透视表: CREATE TABLE Pivot ( i INT, PR
2、IMARY KEY(i) ) CREATE TABLE Foo( i CHAR(1) ) 富表是一个简单的支持表,你应插入以下 10 行 : INSERT INTO Foo VALUES(0) INSERT INTO Foo VALUES(1) INSERT INTO Foo VALUES(2) INSERT INTO Foo VALUES(3) INSERT INTO Foo VALUES(4) INSERT INTO Foo VALUES(5) INSERT INTO Foo VALUES(6) INSERT INTO Foo VALUES(7) INSERT INTO Foo VALUE
3、S(8) INSERT INTO Foo VALUES(9) 利用 10 行在富表,你可以很容易地填充枢轴表 1000 行。得到 1000 行 10行,加入富本身三倍,创建一个笛卡尔积: INSERT INTO Pivot SELECT f1.i+f2.i+f3.i FROM Foo f1, Foo F2, Foo f3 如果你名单上的行数据透视表,你会看到它所需的数目的元素,他们将编号从 0 到 999。 1.1.3 讨论 你会看到食谱,跟随在这本书中,枢轴表通常是用来添加一个排序属性查询。某种形式的数据透视表中发现许多数据库为基础的系统,尽管它往往是隐藏的用户,主要用在预定义的查询和程序。
4、 你已经看到一些表连接(的富表)控制的行数,我们插入语句生成的数据透视表。从 0 到 999 的值是通过连接生成的字符串。数字值,是字符串。因此,当加号( +)运算符用来串连,我们得到的结果如下: 0 + 0 + 0 = 000 0 + 0 + 1 = 001 这些结果是插入整数列在目的地的数据透视表。当你使用一个插入语句插入字符串到整数列的数据库,含蓄地转换成整数的字符串。笛卡尔积富情况下确保所有可能的组合生成,和,因此,所有可能的值从 0 到 999 的产生。 这是值得指出的,这个例子使用行从 0999 和负数。你可以很容易地产生负面的号码,如果需要,重复插入声明“ -”符号前面 的连接字
5、符串,小心点大约 0排。有没有这样的事,作为一个 - 0,所以你不想将 000 行时产生的负轴数。如果你这样做,你最终会与 0 行的数据透视表。在我们的例子中, 0 行是不可能的,因为我们定义一个主键的透视表。 枢轴表可能是最有用的表中的世界。一旦你使用它,它几乎是不可能创造一个严重的应用没有它。作为一个示范,让我们用枢轴表生成一个图表迅速从 32码到 126: SELECT i Ascii_Code, CHAR(i) Ascii_Char FROM Pivot WHERE i BETWEEN 32 AND 126 Ascii_CodeAscii_Char - - 32 33 ! 34 35 # 36 $ 37 % 38 & 39 40 ( 41 ) 42 * 43 + 44 ,