【问题标题】:sql user defined function to retrieve same valuesql用户定义的函数来检索相同的值
【发布时间】:2015-04-28 15:05:53
【问题描述】:

这是我的 asp.net 方法

 public static DataSet ProgressReport(int FirmID)
    {
        if (HttpContext.Current.Session["CNYearID"] != null && HttpContext.Current.Session["CNYearID"].ToString() != "")
        {
            firmcomplianceyear = Convert.ToInt32(HttpContext.Current.Session["CNYearID"]);
        }
        else if (HttpContext.Current.Session["CurrentFCY"] != null && HttpContext.Current.Session["CurrentFCY"].ToString() != "")
        {
            firmcomplianceyear = Convert.ToInt32(HttpContext.Current.Session["CurrentFCY"]);
        }



        if (HttpContext.Current.Session["NewCompYID"] != null && HttpContext.Current.Session["NewCompYID"].ToString() != "")
        {
            compliance_year = Convert.ToInt32(HttpContext.Current.Session["NewCompYID"]);
        }
        else if (HttpContext.Current.Session["CompYearID"] != null && HttpContext.Current.Session["CompYearID"].ToString() != "")
        {
            compliance_year = Convert.ToInt32(HttpContext.Current.Session["CompYearID"]);

        }
        String str = String.Format(@"select 
        F.firmname, 
        fr.firmusername as FirmUserName,
        S.sectionnumber, 
        d.deptname as Department, 
        CONVERT(VARCHAR(10),R.InsertDate, 101) AS Date,
        st.statusname,
        Convert(decimal(10,2),(st.StatusPercentComplete/cast (100 as float))) as Percentage,                
        case when R.PolicyConfirmation = '0' then 'NO'
        when R.PolicyConfirmation = '1' then 'YES'
        end as PolicyConfirmation,
        case when R.GeneralConfirmation='0' then 'NO'
        when R.GeneralConfirmation='1' then 'YES' end  as GeneralConfirmation,
        comments = dbo.udfGetCommentListRajendra(r.firmcompliancerequirementid),
        documents = dbo.udfGetDocumentList( F.firmid,S.sectionid),

---------这里我使用下面的 udf 函数,我被卡住了----

        Location=dbo.udfGetLocationList_1( F.firmid,S.sectionid,fr.firmuserid)
        from requirementcertification r
        join firm  f on F.firmid=R.firmid
        join Section s on S.sectionid= R.sectionid
        join FirmComplianceRequirement fcr on Fcr.FirmComplianceRequirementID = R.FirmComplianceRequirementID
        Join FirmComplianceYear FCY on FCY.FirmComplianceYearID=FCR.firmcomplianceyearid
        join Department d on d.deptid=fcr.assignedto
        join [Status] St on st.statusID = R.statusid
        join firmuser fr on fr.firmuserid = r.userid

         where r.userid in(select firmuserid from firmfirmusermapping where firmid='{0}') AND (D.FirmID=0 OR D.FirmID= '{0}') AND D.IsActive=1 AND D.IsDelete=0 And  FCY.ComplianceYearID='{1}' 
        order by R.insertdate desc", FirmID, compliance_year);
        DataSet ds = DAL.SelectRecords(str.ToString());
        return ds;
    }

.

USE [Mydata]
GO


Create  function [dbo].[udfGetCommentList]
(
@firmcompliancerequirementid int
)
RETURNS varchar(max)
as
BEGIN

DECLARE @listStr VARCHAR(MAX)
--SELECT @listStr = COALESCE(@listStr+',' ,'') + requirementcomment
--FROM requirementcomment  
--where firmcompliancerequirementid = @firmcompliancerequirementid 

Select distinct @listStr= RequirementComment from requirementcomment 
where firmcompliancerequirementid=@firmcompliancerequirementid 
order by RequirementCommentID desc
return @listStr
END


GO

这个的输出:

Name        Section#    Department   Date        Status                 %   Comments
vishalVVVV  23.503     Compliance   04/28/2015  Pending Documentation   25% Rejection comment for the second time
vishalVVVV  23.503  Finance 04/28/2015  Pending Documentation   25%           one more comment on 2nd requirement

我也想要第二行中列 cmets 的相同值...但我得到了以前的值

我需要

评论


第二次拒绝评论

第二次拒绝评论

我得到了:(


第二次拒绝评论

关于第二个要求的更多评论

【问题讨论】:

  • that 的输出不能是那个结果集
  • 请给我们样本数据 inteh 表和您用来调用 udf 的 sql 查询。
  • 是的,是的...这个函数用于检索上述结果的asp,net方法我只是想知道是否可以将第一条评论复制到第二行?在评论栏
  • 让我编辑我的文章
  • @user3367558 你能解决你的问题吗?

标签: sql sql-server-2008 user-defined-functions udf


【解决方案1】:

您的 SQL 中有这一行:

comments = dbo.udfGetCommentListRajendra(r.firmcompliancerequirementid),

按理说,如果第一条记录中的r.firmcompliancerequirementid 与第二条记录中的r.firmcompliancerequirementid 不同,那么您将获得不同的返回值。

如果它们相同,并且您从 dbo.udfGetCommentListRajendra 获得的结果不一致,则可能是表 requirementcomment 中有多个 RequirementCommentID 值,并且您没有得到相同的记录每次都登顶。

但是,如果它们不同,但您希望结果就好像它们是一样的......在单个查询中完成这将很复杂。

因此,我想问一下您想要这种格式的数据的目的是什么。这是要出现在供用户查看的网页、报告或类似内容上吗?

如果是这样,请记住,您始终可以更改屏幕或报告中的输出外观。像现在这样返回数据可能是有意义的,但请修改您的报告,以便在您向下浏览页面时重复第一条注释行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多