Sql server 根据经验对FilteringA进行sql查询

Sql server 根据经验对FilteringA进行sql查询,sql-server,tsql,sorting,Sql Server,Tsql,Sorting,我有这张桌子 CREATE TABLE [dbo].[HRCandidateProject]( [ProjectId] [bigint] IDENTITY(1,1) NOT NULL, [orgid] [int] NULL, [uid] [int] NULL, [CandidateId] [bigint] NULL, [FirstName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [LastName] [varchar

我有这张桌子

  CREATE TABLE [dbo].[HRCandidateProject](
[ProjectId] [bigint] IDENTITY(1,1) NOT NULL,
[orgid] [int] NULL,
[uid] [int] NULL,
[CandidateId] [bigint] NULL,
[FirstName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[LastName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[ProjectName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[FromDate] [datetime] NULL,
[ToDate] [datetime] NULL,
[SkillSet] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Role] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Client] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[ProjectDiscription] [varchar](500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[TotalExperience][int]
      CONSTRAINT [PK_HRCandidateProject] PRIMARY KEY CLUSTERED 
   (
[ProjectId] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
在下拉列表中,我有1-2年、2-4年、4-7年、7年以上的总经验值


我想写一个查询,如果我在dropdownlist中选择1-2年,它将显示数据。它必须只显示那些有1-2年经验的候选人。通过设置地图定义下拉列表值:

<asp:DropDownList ID="Experience" runat="server">
    <asp:ListItem Value="1">1-2 Years</asp:ListItem>
    <asp:ListItem Value="2">2-4 Years</asp:ListItem>
    <asp:ListItem Value="3">4-7 Years</asp:ListItem>
    <asp:ListItem Value="4">More than 7 Years</asp:ListItem>
</asp:DropDownList>
有几件事需要注意:

  • 您应该将其放入存储过程或与参数内联执行,不要将下拉列表中的选定值连接到查询中。一个快速的谷歌搜索,你应该找到如何参数化你的查询
  • 根据问题的参数,返回的值将重叠。有2年经验的候选人将出现在第一个和第二个结果集中,等等。如果这是一个不希望出现的行为,你应该能够调整此标准以防止出现这种情况
  • 不要使用SELECT*进入生产,请键入所有列名

我不太确定您的问题是什么???你在技能集中的物理值是什么??你到底想达到什么目的?我想用经验和技能来分类,技能和总经验之间的关系是什么?你把技能放在哪里了,为什么?where子句针对特定的技能集过滤数据,不需要对其进行排序,因为它只返回特定的技能集。这是过滤,而不是排序。您将使用一个where子句,就像您建议的那样,但您可能希望使用DropDownList 1.Selectedvalue。它还通过一个巨大的SQL注入孔来实现
SELECT  *
FROM    HRCandidateProject
WHERE   
    (
        @SelectedExperience = 1
        AND TotalExperience BETWEEN 1 AND 2
    )
    OR  (
        @SelectedExperience = 2
        AND TotalExperience BETWEEN 2 AND 4
    )
    OR  (
        @SelectedExperience = 3
        AND TotalExperience BETWEEN 4 AND 7
    )
    OR  (
        @SelectedExperience = 4
        AND TotalExperience > 7
    )