0

我有这张桌子

  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 年以上

我想编写一个查询,如果我在下拉列表中选择 1-2 年,它将显示数据,它必须只显示那些在 1 到 2 年之间有经验的候选人

4

1 回答 1

1

通过如下设置地图来定义下拉列表值:

<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>

在您的查询中,检查 OR 分支中的每个值,如果该值与所选值匹配,则根据经验进行过滤:

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
    )

有几点需要注意:

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