SQL交叉表的实现——CASE函数的使用

问题的提出:       
如何把以下形式
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值