现在的位置: 首页 > 综合 > 正文

SQL交叉表的实现

2012年11月10日 ⁄ 综合 ⁄ 共 1191字 ⁄ 字号 评论关闭
  

        问题的提出:       

如何把以下形式

FItemID     FName         FStockID    FDeptID        FAuxQty                                               

----------- --------

337         生产部       598         327         1000.0

337         包装车间     624         605         1000.0

339         包装车间     598         605         200.0

.              .          

.              .  

.              .

转为这个形式

FItemID    生产部      包装车间  FStockID

----------- --------

337        1000                  .      598

337        0           1000      .      624

339        0           200       .      598 

        从上面我们可以看出,得到的结果就是要实现一个交叉表,要解决以上问题,最简单的方法就是用CASE函数。让我们先来看看CASE函数的释义:

CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显式可选值。数据中的更改是临时的,没有对数据进行永久更改。例如,CASE 函数可以在 state 列中有 CA 值的行的查询结果集内显示 California。


CASE 函数包含: 


        CASE 关键字。



        需要转换的列名称。



        指定要搜索的表达式的 WHEN 子句和指定要替换它们的表达式的 THEN 子句。



        END 关键字。



        可选的、定义 CASE 函数别名的 AS 子句。 

        由此,我们得出以上问题的解法:

SELECT FItemID, (CASE FName WHEN '生产部' THEN FAuxQty ELSE 0 ENDAS '生产部'

      (
CASE FName WHEN '包装车间' THEN FAuxQty ELSE 0 ENDAS '包装车间'

      FStockID, FDeptID

FROM testtable

        以上只是个简单的示例,只要我们理解的CASE函数的正确用法,要写出复杂的交叉表,也是轻而易举的事了。

              转载请注明作者:cnblogs(Bonny.wong) 2005.1.22

抱歉!评论已关闭.