SQL交叉表的实现

  
        问题的提出:       
如何把以下形式
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   END AS   ' 生产部 '
      (
CASE  FName  WHEN   ' 包装车间 '   THEN  FAuxQty  ELSE   0   END AS   ' 包装车间 '
      FStockID, FDeptID
FROM  testtable

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

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

你可能感兴趣的:(sql)