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
    )

注意すべき点がいくつかあります。

  • これをストアド プロシージャに入れるか、パラメーターを使用してインラインで実行する必要があります。ドロップダウン リストから選択した値をクエリに連結しないでください。簡単な Google 検索を行うと、クエリをパラメーター化する方法が見つかるはずです。
  • 質問のパラメータに基づいて、返される値が重複します。2 年の経験を持つ候補者は、最初と 2 番目の結果セットの両方に表示されます。これが望ましくない動作である場合は、この基準を微調整してそれを防ぐことができるはずです。
  • SELECT * を使用して本番環境に移行しないでください。すべての列名を入力してください。
于 2013-02-26T09:29:03.420 に答える