Sql 使用游标创建表值函数
这是我的第一个表值函数 我有一个叫tableFunc的桌子 “我的表”包含以下列: Empid 2361023611…-唯一的 ChDate 2015-4-2122:02:10.8072015-4-2122:02:11.050,。。。 站点25所有值都相同 用户标识7,7-同样的价值 初始值0,0-同样的价值 finsal 0.696176161,0.696176161,…-所有值相同 注意:输入文本,输入文本-同样的价值 我想创建一个带有游标的表值函数,该游标将获取所有行并只返回唯一的记录。我愿意接受其他建议Sql 使用游标创建表值函数,sql,sql-server,Sql,Sql Server,这是我的第一个表值函数 我有一个叫tableFunc的桌子 “我的表”包含以下列: Empid 2361023611…-唯一的 ChDate 2015-4-2122:02:10.8072015-4-2122:02:11.050,。。。 站点25所有值都相同 用户标识7,7-同样的价值 初始值0,0-同样的价值 finsal 0.696176161,0.696176161,…-所有值相同 注意:输入文本,输入文本-同样的价值 我想创建一个带有游标的表值函数,该游标将获取所有行并只返回唯一的记录。我
谢谢这将选择不同的值:
SELECT DISTINCT Empid,
[Site],
userID,
initsal,
finsal,
note
FROM tableFunc A
GROUP BY Empid,[Site],userID,initsal,finsal,note
如果希望不同的EMPID具有chDate列表:
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
以下是编写表值函数以从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
希望这有帮助 您使用的是哪种RDBMS Oracle、MySQL等?您是否考虑过SELECT DISTINCT,如果不考虑,为什么不考虑?我使用的是SQL Server。我试图将此表与其他表一起使用以创建视图,这样做时会得到重复的记录。所以SELECT DISTINCT不起作用。实际上它们不是重复的,因为ChDate是不同的。。。您只想要其他不重复的列吗?Stephan,是的,我希望能够通过此表获取并返回不重复的行。如果可以,请尽量避免使用光标-在99%的情况下,您可以!Stephan,我在运行上一个查询时遇到以下错误:Msg 195,级别15,状态10,第4行“CONCAT”不是可识别的内置函数名。Stephan,nice和我可以确认没有重复项,我如何告诉sql返回报告中最新的chDate。我添加了列recent_chDateRookie13,谢谢。我更新了代码以反映您的代码。现在可以添加一个游标,它可以通过行获取并返回最新的记录,可能是按日期和时间。太好了!我很高兴这有帮助。如果我理解正确,上面的函数应该已经为您带来了基于您的ChDate的最新记录。这就是你要找的吗?在ChDate日期时间后有一个额外的逗号。我删除了它,您能再试一次吗?初始表包含747行。当我运行这个函数时,我得到了相同数量的记录。您的tableFunc表是否有多行相同的EmpId?如果我们没有多个ID,您将始终返回一组不同的记录。否则,此函数应返回具有重复记录的所有员工。