有函数 GetLastPrice(料号,单位) 返回该料号最后一次的价格和币别
我执行 select * from dbo.GetLastPrice('aaaaa','PCS') 能正常运行现在我想将t1表中所有单位为PCS的料号的最后一次价格显示出来
 select dbo.GetLastPrice(t1.料号,t1.单位) from t1 where t1.单位='PCS' 
 报错误,说dbo.GetLastPrice无效应该怎么解决啊,我现在想将单位为PCS,或者KG或者指定料号清单的最后一次价格显示出来,应该怎么办啊,要求不用游标

解决方案 »

  1.   

    2000还是2005?
    2000改用常量函数
    2005改用apply运算
      

  2.   

    select * from dbo.GetLastPrice('aaaaa','PCS') 
    union all
    select * from dbo.GetLastPrice('aaaaa','KG') 
    .....................
    --或者改改这个函数
      

  3.   

    现在我想将t1表中所有单位为PCS的料号的最后一次价格显示出来 用不着函数,这样即可.select t.* from t1 t where 单位 = 'PCS' and 时间字段 = (select max(时间字段) from t1 where 料号 = t.料号 and 单位 = 'PCS')select t.* from t1 t where 单位 = 'PCS' and not exists (select 1 from t1 where 料号 = t.料号 and 单位 = 'PCS' and 时间字段 > t.时间字段)
      

  4.   

    我执行 select * from dbo.GetLastPrice('aaaaa','PCS') 能正常运行 返回表函数?
      

  5.   

    IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1
    IF OBJECT_ID('T2') IS NOT NULL DROP TABLE T2
    IF OBJECT_ID('FUN_T2') IS NOT NULL DROP FUNCTION FUN_T2
    GO
    CREATE TABLE T1(
    ID INT
    ,ID2 INT
    )
    INSERT INTO T1
    SELECT 1,1 UNION ALL
    SELECT 2,3
    CREATE TABLE T2(
    ID INT
    ,COL1 VARCHAR(10)
    ,COL2 VARCHAR(10)
    )
    INSERT INTO T2
    SELECT 1,'A','B' UNION ALL
    SELECT 2,'C','D' UNION ALL
    SELECT 3,'E','F'
    GO
    CREATE FUNCTION FUN_T2(@ID INT)
    RETURNS @T TABLE(COL1 VARCHAR(10),COL2 VARCHAR(10))
    AS
    BEGIN
    INSERT INTO @T
    SELECT COL1,COL2 FROM T2 WHERE ID=@ID
    RETURN
    END
    GO
    SELECT T1.* 
    ,T12.*
    FROM T1 
    CROSS APPLY  DBO.FUN_T2(T1.ID2) T12
    /*
    1 1 A B
    2 3 E F
    */