SQL动态位置和分组依据 [英] SQL Dynamic Where and Group by

查看:81
本文介绍了SQL动态位置和分组依据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using stored procedure and linking it with ASP C#, the below query runs successfully with no errors:

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 where子句,因此我将查询分为三部分:@ SQL,@ WHERE,@ GROUPBY.

Now I need to add DYNAMIC where clauses, so I break the query into 3 parts @SQL,@WHERE,@GROUPBY.

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

Please note that I have a aggregate function sum.

    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

推荐答案

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

Weird, all i had to do was place the columns inside []..

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

这篇关于SQL动态位置和分组依据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆