十年

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  
        问题的提出:       
如何把以下形式
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
posted on 2005-01-22 23:24  留不住的时光  阅读(6371)  评论(5编辑  收藏  举报