怎么使用直接使用字段的符号
例如:
考核标准表:
考核项目    符号       标准       扣款
考核项目1   >=       15         10
考核项目2   >        10          5
考核项目3   <=        5          7
考核项目4   <         9          9岗位考核记录表:
生产岗位    考核项目1  考核项目2  考核项目3  考核项目4  
一号机      16        8         5         10
二号机      14        13        6         7我要查询出每个岗位的扣款情况:
如下:
生产岗位           扣款
一号机             17
二号机             14求一个sql 不要case语句,要能直接使用字段符号的。

解决方案 »

  1.   

    扣款是这样产生的:
    考核项目1 >= 标准时就扣款
    对于一号机的考核项目1来说:
    (16     >=(符号字段)  15)所以要扣10元
    对于其他考核项目也是一样,扣款是累计的
    1号机是考核项目1和考核项目3都要扣款的,所以是17(10+7)元
      

  2.   

    ------------------------------------------------------------------------
    -- Author:  happyflystone  
    -- Date  :  2009-04-02 15:39:34
    -- Ver:     Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) 
    --       Apr 14 2006 01:12:25 
    --       Copyright (c) 1988-2005 Microsoft Corporation
    --       Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
    --      
    -------------------------------------------------------------------------- Test Data: ta
    IF OBJECT_ID('ta') IS NOT NULL 
        DROP TABLE ta
    Go
    CREATE TABLE ta(考核项目 NVARCHAR(5),符号 NVARCHAR(2),标准 INT,扣款 INT)
    Go
    INSERT INTO ta
     SELECT '考核项目1','>=',15,10 UNION ALL
     SELECT '考核项目2','>',10,5 UNION ALL
     SELECT '考核项目3','<=',5,7 UNION ALL
     SELECT '考核项目4','<',9,9 
    GO
    -- Test Data: tb
    IF OBJECT_ID('tb') IS NOT NULL 
        DROP TABLE tb
    Go
    CREATE TABLE tb(生产岗位 NVARCHAR(3),考核项目1 INT,考核项目2 INT,考核项目3 INT,考核项目4 INT)
    Go
    INSERT INTO tb
     SELECT '一号机',16,8,5,10 UNION ALL
     SELECT '二号机',14,13,6,7 
    GO
    --Start
    declare @s varchar(1000)SELECT @s = isnull(@s+'+','')+'case when '+考核项目+  符号 +ltrim(  标准) +' then  '+ltrim(扣款)+' else 0 end'
    FROM
    TA
     
    exec('select 生产岗位, '+@s+' from tb')
    --Result:
    /*
    生产岗位 
    ---- -----------
    一号机  17
    二号机  14
    */
    --End