使用游标创建表值函数

时间:2015-04-24 15:01:41

标签: sql sql-server

这是我的第一个表值函数。

我有一个表格tableFunc

我的表包含以下列:

  • Empid(23610,23611 ...) - 唯一
  • ChDate(2015-4-21 22:02:10.807,2015-4-21 22:02:11.050,...)
  • Site(25) - 所有相同的值
  • userid(7,7,...) - 所有相同的值
  • initsal(0,0,...) - 所有相同的值
  • finsal(0.696176161,0.696166161,...) - 所有相同的值
  • note(输入文字,输入文字......) - 所有相同的值

我想创建一个带有游标的表值函数,该游标将获取行并仅返回唯一记录。我对其他建议持开放态度。

由于

2 个答案:

答案 0 :(得分:0)

这将选择不同的值:

SELECT DISTINCT Empid,
                [Site],
                userID,
                initsal,
                finsal,
                note
FROM tableFunc A
GROUP BY Empid,[Site],userID,initsal,finsal,note

如果您希望不同的EmpID具有chDates列表:

SELECT  Empid,
        STUFF   (
                (
                SELECT ',' + CAST(chDate AS VARCHAR(30))
                FROM tableFunc SubQuery
                WHERE SubQuery.Empid = A.Empid
                FOR XML PATH('')
                ),
                1,1,'') AS ChDateList,
        [Site],
        userID,
        initsal,
        finsal,
        note,
        MAX(chDate) AS recent_chDate
FROM tableFunc A
GROUP BY Empid,[Site],userID,initsal,finsal,note

答案 1 :(得分:0)

这是一种可以编写表值函数以从tablefunc表中获取唯一记录的方法:

CREATE FUNCTION dbo.GetUniqueRecords() 
RETURNS @TableFunc TABLE (
    --I am not sure how you have these datatypes defined, but change it to your needs
    EmpId INT NOT NULL
    ,ChDate datetime
    ,Site INT
    ,userid INT
    ,initsal MONEY
    ,finsal MONEY
    ,note VARCHAR(200)
    )
AS
BEGIN
    INSERT into @TableFunc(EmpId,ChDate,Site,userid,initsal,finsal,note)
    SELECT Empid
        ,max(ChDate)
        ,max([Site])
        ,max(userID)
        ,max(initsal)
        ,max(finsal)
        ,max(note)
    FROM tableFunc
    GROUP BY Empid;

    RETURN;
END
GO

希望这有帮助!