SQL动态位置和分组依据

时间:2016-05-08 12:37:40

标签: c# sql asp.net database stored-procedures

我正在使用存储过程并将其与ASP C#链接,以下查询成功运行且没有错误:

SELECT       loginInfo.ApplicantID, Personal.FirstName, Personal.LastName, Personal.Nationality, Job.PositionType, 
                      Job.InterestedArea, loginInfo.ApplicantStatus, Latest.HighestDegree, Latest.CompletionDate, 
                      Latest.LatestJobTitle, Latest.LatestCompanyIndustry, Latest.StartDate, Latest.EndDate,
                      SUM(DATEDIFF(YEAR,Exper.StartDate,Exper.EndDate)) AS TotalYearsExp
FROM         dbo.ApplicantLoginInfo AS loginInfo INNER JOIN
                      dbo.PersonalInfo AS Personal ON loginInfo.ApplicantID = Personal.ApplicantID INNER JOIN
                      dbo.InterestedJob AS Job ON loginInfo.ApplicantID = Job.ApplicantID INNER JOIN
                      dbo.LatestAcadExpInfo AS Latest ON loginInfo.ApplicantID = Latest.ApplicantID INNER JOIN
                      dbo.Experience AS Exper ON loginInfo.ApplicantID = Exper.ApplicantID

WHERE 1=1


GROUP BY loginInfo.ApplicantID, Personal.FirstName, Personal.LastName, Personal.Nationality, Job.PositionType, 
                      Job.InterestedArea, loginInfo.ApplicantStatus, Latest.HighestDegree, Latest.CompletionDate, 
                      Latest.LatestJobTitle, Latest.LatestCompanyIndustry, Latest.StartDate, Latest.EndDate

ORDER BY ApplicantID DESC

现在我需要在子句中添加DYNAMIC,所以我将查询分为3个部分@ SQL,@ WHERE,@ GROUPBY。

请注意,我有一个总函数和。

    if @gender <> '' SET @WHERE = ' AND Gender='''+@gender+''''
    if @nationality <> '' SET @WHERE = @WHERE + ' AND Nationality='''+@nationality+''''
    if @highestdegree <> '' SET @WHERE = @WHERE + ' AND HighestDegree='''+@highestdegree+''''
    if @latestcompanyindustry <> '' SET @WHERE = @WHERE + ' AND LatestCompanyIndustry='''+@latestcompanyindustry+''''
    if @interestedarea <> '' SET @WHERE = @WHERE + ' AND InterestedArea='''+@interestedarea+''''

    SET @SQL = 'SELECT loginInfo.ApplicantID, Personal.FirstName, Personal.LastName, Personal.Nationality, Job.PositionType,
    Job.InterestedArea, loginInfo.ApplicantStatus, Latest.HighestDegree, Latest.CompletionDate, Latest.LatestJobTitle, Latest.LatestCompanyIndustry, Latest.StartDate, Latest.EndDate,
    SUM(DATEDIFF(YEAR,Exper.StartDate,Exper.EndDate)) AS TotalYearsExp
    FROM dbo.ApplicantLoginInfo AS loginInfo INNER JOIN dbo.PersonalInfo AS Personal ON loginInfo.ApplicantID = Personal.ApplicantID INNER JOIN
    dbo.InterestedJob AS Job ON loginInfo.ApplicantID = Job.ApplicantID INNER JOIN 
dbo.LatestAcadExpInfo AS Latest ON loginInfo.ApplicantID = Latest.ApplicantID INNER JOIN dbo.Experience AS Exper ON loginInfo.ApplicantID = Exper.ApplicantID
    WHERE 1=1'

    SET @GROUPBY = 'GROUP BY loginInfo.ApplicantID, Personal.FirstName, Personal.LastName, Personal.Nationality, Job.PositionType, 
                                  Job.InterestedArea, loginInfo.ApplicantStatus, Latest.HighestDegree, Latest.CompletionDate, 
                                  Latest.LatestJobTitle, Latest.LatestCompanyIndustry, Latest.StartDate, Latest.EndDate

            ORDER BY ApplicantID DESC'

            EXEC(@SQL+@WHERE+@GROUPBY)

我一直收到错误

Error: The multi-part identifier "dbo.LatestAcadExpInf" could not be bound. The multi-part identifier "dbo.Experience.StartDate" could not be bound. The multi-part identifier "dbo.Experience.EndDate" could not be bound

1 个答案:

答案 0 :(得分:0)

很奇怪,我所要做的就是将列放在[] ..

感谢Whisk https://stackoverflow.com/a/206645/6240803